아웃룩 켤 필요 없다! 파이썬으로 엑셀 첨부파일 자동 이메일 쏘기
파이썬으로 흩어진 엑셀 데이터를 모으고, 피벗 테이블로 요약하고, 차트까지 그렸습니다. 이제 이 완벽한 보고서를 30명의 부서장들에게 이메일로 보낼 차례입니다. 보통이라면 어떻게 할까요? 아웃룩이나 지메일 창을 30번 띄우고, "안녕하세요, OOO 부서장님. 이번 달 실적 첨부합니다."라는 똑같은 멘트를 복사해서 붙여넣은 뒤, 실수로 엉뚱한 파일을 첨부하지는 않았는지 조마조마하며 발송 버튼을 누를 것입니다.
데이터 전처리를 아무리 자동화했어도, 배포하는 과정에서 사람의 손을 타면 결국 '야근'을 피할 수 없습니다. 하지만 파이썬은 이메일 발송마저도 단 몇 초 만에 처리해 냅니다. 오늘은 파이썬 코드로 이메일을 작성하고, 엑셀 파일을 첨부해서 자동으로 쏘아 보내는 '이메일 자동화'의 세계를 안내해 드립니다.
1. 파이썬의 우체부: smtplib와 email 라이브러리
파이썬에서 이메일을 보내려면 기본적으로 내장되어 있는 두 가지 도구를 사용합니다. email 모듈은 편지지와 봉투를 예쁘게 꾸미는 역할을 하고, smtplib는 완성된 편지를 우체통에 넣어 실제 목적지로 쏘아 보내는 집배원 역할을 합니다.
이메일을 보내기 위해서는 구글(Gmail) 계정을 사용하는 것이 가장 대중적입니다. 단, 보안 문제 때문에 내 원래 구글 비밀번호를 코드에 직접 쓰면 안 되며, 구글 계정 설정에서 '앱 비밀번호(16자리 문자)'를 따로 발급받아 사용해야 합니다.
2. 엑셀 파일 첨부하고 이메일 보내기 (실전 코드)
백문이 불여일견입니다. 내가 만든 '최종보고서.xlsx' 파일을 팀장님께 자동으로 보내는 전체 코드를 살펴보겠습니다.
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# 1. 내 이메일 계정 정보 세팅
smtp_server = 'smtp.gmail.com'
smtp_port = 587
sender_email = '내이메일@gmail.com'
password = '구글_앱비밀번호_16자리'
# 2. 편지 봉투 만들고 수신자/제목 쓰기
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = '팀장님@company.com'
msg['Subject'] = '이번 달 부서별 자동화 실적 보고서입니다.'
# 3. 편지 본문 작성하기
body = '팀장님,\n이번 달 요약 데이터를 엑셀로 첨부해 드립니다.\n감사합니다.'
msg.attach(MIMEText(body, 'plain'))
# 4. 엑셀 파일(최종보고서.xlsx) 첨부하기
file_path = '최종보고서.xlsx'
with open(file_path, 'rb') as f:
attachment = MIMEApplication(f.read())
attachment.add_header('Content-Disposition', 'attachment', filename='최종보고서.xlsx')
msg.attach(attachment)
# 5. 우체부(SMTP) 불러서 전송하기
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # 보안 연결 시작
server.login(sender_email, password) # 로그인
server.send_message(msg) # 발송!
server.quit() # 우체부 퇴근
print("이메일 발송이 성공적으로 완료되었습니다!")
이 코드를 실행하는 순간, 마우스로 이메일 창을 열거나 파일을 드래그할 필요도 없이 팀장님의 메일함에 엑셀 파일이 정확하게 꽂히게 됩니다.
3. 진정한 자동화: for문으로 30명에게 맞춤형 메일 쏘기
이 기술이 진짜 빛을 발하는 순간은 수신자가 여러 명일 때입니다. 엑셀에 '받는 사람 이름'과 '이메일 주소' 목록을 정리해 두었다면, 5편에서 배운 for 반복문을 활용할 수 있습니다.
코드 구조를 for문 안에 넣고, msg['To'] = 수신자이메일, body = f"{이름} 부서장님, 안녕하세요..." 처럼 변수로 처리해 버리면 어떨까요? 파이썬은 눈 깜짝할 사이에 30명 각자의 이름이 들어간 1:1 맞춤형 이메일을 작성하고, 각 부서에 맞는 엑셀 파일을 정확하게 매칭하여 30번 연속으로 발송합니다. 사람이 하면 1시간이 걸릴 일이 단 5초면 끝납니다.
배포까지 자동화해야 진짜 퇴근입니다
데이터를 아무리 멋지게 가공했더라도, 남에게 전달하는 과정이 수동이라면 아직 완벽한 자동화가 아닙니다. 오늘 배운 이메일 전송 코드를 14편의 엑셀 자동화 코드 맨 마지막 줄에 붙여넣어 보세요. "수집 -> 가공 -> 요약 -> 엑셀 저장 -> 이메일 발송" 이라는 전체 업무 프로세스가 클릭 한 번에 끝나는 기적을 맛보실 수 있습니다.
▶ 핵심 요약
- 파이썬의
smtplib와email라이브러리를 사용하면, 웹 브라우저나 메일 프로그램을 켜지 않고도 백그라운드에서 이메일을 발송할 수 있습니다. MIMEApplication모듈을 사용하면 코드로 생성한 엑셀(xlsx), PDF 등 다양한 형식의 파일을 이메일에 손쉽게 첨부할 수 있습니다.for반복문과 f-string 문법을 결합하면 수십 명의 수신자에게 각기 다른 이름과 내용을 담은 맞춤형 이메일을 대량으로 자동 발송할 수 있습니다.
코드를 실행하는 것조차 귀찮아진 당신을 위한 마지막 선물! 다음 19편에서는 '내가 출근하기도 전인 새벽 6시, 컴퓨터가 알아서 파이썬 코드를 실행하게 만드는 윈도우 작업 스케줄러 세팅법'을 알아보겠습니다.
여러분은 이메일을 보낼 때 첨부파일을 빼먹고 보내서 "아차!" 하며 다시 메일을 보냈던 아찔한 경험이 있으신가요? 이메일 발송 시 가장 자주 하는 실수가 무엇인지 댓글로 편하게 공유해 주세요!
댓글
댓글 쓰기