파이썬 지메일 자동 발송으로 엑셀 첨부파일 보내기 (40대 실전)

지난 12편에 걸쳐 엑셀에 흩어진 데이터를 취합하고, 특정 조건의 대상만 필터링하여 바탕화면 새 폴더에 깔끔하게 저장하는 무인 자동화를 완성했습니다.

하지만 기계가 엑셀 파일은 기가 막히게 만들어주는데, 결국 실무자인 제가 다시 자리에 앉아 인터넷 창을 켜고, 메일에 로그인해서, 담당자들의 메일 주소를 입력하고 방금 만든 엑셀 파일을 첨부해 ‘보내기’ 버튼을 누르고 있었습니다. 하루에 한 번이면 참겠는데, 수시로 현장 상황을 공유해야 할 때는 이 과정조차 엄청난 스트레스이자 시간 낭비입니다.

“파이썬이 엑셀 파일을 만든 직후에, 곧바로 담당자 메일로 쏴줄 수는 없을까?”

당연히 가능합니다. 오늘은 완성된 엑셀 보고서를 현장 담당자에게 1초 만에 쏴주는 파이썬 지메일 자동 발송 기술을 공유합니다. 특히 인터넷에 돌아다니는 옛날 코드를 무작정 복사했다가 100% 마주치게 되는 ‘구글 로그인 보안 에러’를 실무자의 시선에서 냉철하게 분석하고 박살 내 보겠습니다.

Alt텍스트 : 파이썬 지메일 자동 발송을 적용하기 전, 수동으로 메일에 엑셀을 첨부하는 번거로운 과정

1. 실무 트러블슈팅: “내 비밀번호가 맞는데 왜 로그인이 안 될까?”

인터넷에 파이썬 지메일 자동 발송을 검색하면 수많은 코드가 나옵니다. 하지만 그 코드를 그대로 복사해서 내 구글 아이디와 비밀번호를 넣고 돌려보면 십중팔구 새빨간 에러 메시지가 뜹니다.

smtplib.SMTPAuthenticationError: Username and Password not accepted.
(아이디나 비밀번호가 틀렸습니다.)

“어? 나 방금 이 비밀번호로 스마트폰에서 구글 로그인했는데?” 라며 억울해하실 겁니다. 코드가 틀린 것도, 비밀번호를 잘못 치신 것도 아닙니다. 구글의 보안 정책이 강력해졌기 때문입니다.

구글 입장에서는 주인이 직접 브라우저를 켜서 로그인한 것이 아니라, 정체불명의 ‘파이썬 코드’가 내 메일함에 접속하려고 하니 해킹으로 간주하고 문을 쾅 닫아버린 것입니다. 이 철통 보안을 뚫고 파이썬 지메일 자동 발송을 성공시키려면 내 원래 비밀번호가 아닌, 파이썬 전용 통행증인 ‘앱 비밀번호’라는 것을 따로 발급받아야 합니다.

2. 구글 ‘앱 비밀번호’ 1분 만에 발급받는 법

파이썬에게 합법적인 통행증을 쥐여주는 과정입니다. (※ 전제조건: 구글 계정에 ‘2단계 인증’이 켜져 있어야 합니다.)

  1. 크롬 브라우저에서 내 구글 계정 프로필(우측 상단)을 누르고 [Google 계정 관리]로 들어갑니다.
  2. 왼쪽 메뉴에서 [보안] 탭을 클릭합니다.
  3. 스크롤을 내려 [2단계 인증] 메뉴를 클릭해 들어갑니다.
  4. 맨 밑으로 스크롤을 내리면 [앱 비밀번호]라는 항목이 있습니다. 클릭합니다.
  5. 앱 이름에 ‘파이썬 메일 발송봇’이라고 알아보기 쉽게 적고 [만들기]를 누릅니다.
  6. 화면에 노란색 바탕으로 16자리의 영어 알파벳이 뜹니다. 이것이 바로 파이썬 전용 통행증입니다! 창을 닫으면 다시 볼 수 없으니, 꼭 메모장에 띄어쓰기 없이 복사해 둡니다.
파이썬 지메일 자동 발송 로그인 에러를 해결하기 위한 구글 앱 비밀번호 발급 화면
Alt 텍스트 : 파이썬 지메일 자동 발송 로그인 에러를 해결하기 위한 구글 앱 비밀번호 발급 화면

3. 실전 코드: 엑셀 첨부해서 이메일 쏘기

통행증을 얻었으니 이제 진짜 코드를 짤 차례입니다. 파이썬 내장 모듈인 smtplibemail을 사용합니다. 바탕화면에 저장된 ‘긴급방역_목록.xlsx’ 파일을 담당자에게 보내보겠습니다.

Python

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

# 1. 보내는 사람, 받는 사람, 메일 제목 세팅
sender_email = "내구글아이디@gmail.com"
receiver_email = "담당자메일주소@naver.com" 
password = "아까_발급받은_16자리_앱비밀번호" 

msg = MIMEMultipart()
msg['Subject'] = "긴급 조치 현장 목록 엑셀 전달"
msg['From'] = sender_email
msg['To'] = receiver_email

# 2. 메일 본문 내용 적기
body = "담당자님, 금일 긴급 조치가 필요한 현장 목록 엑셀 파일을 첨부합니다. 확인 바랍니다."
msg.attach(MIMEText(body, 'plain'))

# 3. 바탕화면의 엑셀 파일 첨부하기 (경로에 주의하세요)
file_path = "C:/Users/Admin/Desktop/긴급방역_목록.xlsx"
with open(file_path, "rb") as f:
    attachment = MIMEApplication(f.read(), _subtype="xlsx")
    attachment.add_header('Content-Disposition', 'attachment', filename="긴급방역_목록.xlsx")
    msg.attach(attachment)

# 4. 파이썬 지메일 자동 발송 실행
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls() # 보안 연결 시작
server.login(sender_email, password)
server.send_message(msg)
server.quit()

print("성공적으로 엑셀 파일이 전송되었습니다!")

코드를 실행하면 내 지메일 보낸 편지함에 첨부파일과 함께 메일이 발송된 것을 확인할 수 있습니다. 수신자의 이메일이 네이버든 카카오든 상관없이 완벽하게 전송됩니다.

파이썬 지메일 자동 발송 코드를 통해 엑셀 첨부파일이 성공적으로 도착한 화면
Alt 텍스트: 파이썬 지메일 자동 발송 코드를 통해 엑셀 첨부파일이 성공적으로 도착한 화면

4. 글을 마치며: 엑셀 자동화와 메일 발송의 결합

오늘 배운 파이썬 지메일 자동 발송 코드의 진짜 파괴력은 이전 시리즈들과 결합할 때 폭발합니다.

pandas를 이용해 엑셀 데이터를 가공하는 코드 맨 마지막 줄에 오늘 배운 메일 발송 코드를 이어 붙이고, 지난 시간에 배운 ‘작업 스케줄러’를 통해 매일 오후 6시에 실행되게 맞춰두십시오. 컴퓨터가 스스로 방역 대장을 분석해 긴급 현장을 엑셀로 뽑아내고, 담당자 10명에게 각자 이메일까지 쏜 뒤 쿨하게 종료됩니다.

만약 컴퓨터가 혼자서 코드를 실행하게 만드는 방법을 모르신다면, 제가 직전에 작성한 [40대 파이썬 독학 12편: 파이썬 작업 스케줄러로 무인 자동화 완성하기 (클릭)] 글을 반드시 읽고 적용해 보시기를 강력히 권장합니다.

단순 반복 업무는 완벽하게 기계(AI)에게 넘겼습니다. 다음 시간에는 이메일 알림마저 잘 안 보는 현장 인원들을 위해, 스마트폰에 다이렉트로 알림을 꽂아버리는 ‘카카오톡 API 연동’ 실전 팁으로 돌아오겠습니다!

댓글 남기기