회사 업무를 하다 보면 고객이나 협력사, 혹은 팀원들에게 동일하거나 유사한 내용의 이메일을 대량으로 보내야 하는 상황이 자주 발생합니다. 엑셀에 정리된 수십 명의 이름과 이메일 주소를 보면서, 메일 작성 창을 열고 복사-붙여넣기를 반복하다 보면 금세 지치고 받는 사람의 이름을 잘못 입력하는 아찔한 실수를 저지르기도 합니다.
저 역시 초보 시절, 이벤트 안내 메일을 손수로 보내다가 받는 사람 이름을 잘못 적어 고객으로부터 항의 메일을 받았던 당황스러운 경험이 있습니다. 파이썬을 활용하면 엑셀 파일의 회원 명단을 읽어와 수신자별로 맞춤형 메일 본문을 만든 뒤, 클릭 한 번으로 수십, 수백 명에게 몇 초 만에 안전하게 메일을 발송할 수 있습니다.
오늘은 파이썬 내장 모듈인 smtplib와 email 모듈을 활용해 메일을 자동으로 발송하는 방법과, 보안 설정 및 스팸 차단을 피하는 실전 노하우를 정리해 드립니다.
1. 이메일 자동 발송의 원리: SMTP 프로토콜 이해하기
파이썬으로 이메일을 보내려면 SMTP(Simple Mail Transfer Protocol)라는 인터넷 메일 전송 규약을 이해해야 합니다.
우리가 네이버나 지메일(Gmail) 웹사이트에 접속해서 메일을 쓰는 대신, 파이썬 코드가 우체부 역할을 하여 네이버나 지메일의 메일 서버에 직접 접속한 뒤 편지를 전달하는 방식입니다. 이를 위해 필요한 기본 준비물은 다음과 같습니다.
SMTP 서버 주소 및 포트 번호 (예: 지메일은
smtp.gmail.com, 포트587)보내는데 사용할 이메일 계정 아이디와 비밀번호
2. 사전 준비: 네이버/지메일 앱 비밀번호 생성하기
최근 주요 이메일 서비스들은 보안 강화로 인해 일반 로그인 비밀번호를 파이썬 코드에 직접 입력하면 접속을 차단합니다. 따라서 반드시 계정 설정에서 외부 프로그램용 '앱 비밀번호(비밀번호)'를 별도로 발급받아 사용해야 합니다.
지메일(Gmail) 기준 설정 순서
구글 계정 관리 -> [보안] 탭으로 이동합니다.
'2단계 인증'을 활성화합니다.
Search 칸에 '앱 비밀번호'를 검색하여 들어간 뒤, 앱 이름을 '파이썬 메일' 등으로 지정하고 16자리 앱 비밀번호를 생성합니다.
생성된 16자리 비밀번호를 파이썬 코드의 비밀번호 자리에 입력합니다.
3. 실전 코딩: 파이썬 메일 발송 기본 스크립트
파이썬에는 메일 전송을 위한 smtplib와 메일 내용(제목, 본문, 첨부파일)을 규격에 맞게 구성해 주는 email 내장 모듈이 기본 탑재되어 있습니다.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 1. 메일 계정 정보 설정
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
SENDER_EMAIL = "your_email@gmail.com"
SENDER_PASSWORD = "xxxx xxxx xxxx xxxx" # 발급받은 16자리 앱 비밀번호
# 2. 메일 메시지 객체 생성 (MIMEMultipart)
msg = MIMEMultipart()
msg['From'] = SENDER_EMAIL
msg['To'] = "receiver@naver.com"
msg['Subject'] = "[안내] 2026년 8월 프로젝트 진행 상황 공유"
# 메일 본문 작성 (HTML 형태도 가능)
body = """
안녕하세요, 홍길동님.
요청하신 8월 프로젝트 진행 상황 리포트를 전달해 드립니다.
감사합니다.
"""
msg.attach(MIMEText(body, 'plain', 'utf-8'))
# 3. SMTP 서버 접속 및 메일 발송
try:
server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
server.starttls() # TLS 암호화 연결 시작
server.login(SENDER_EMAIL, SENDER_PASSWORD)
server.sendmail(SENDER_EMAIL, msg['To'], msg.as_string())
server.quit()
print("메일이 성공적으로 발송되었습니다!")
except Exception as e:
print(f"메일 발송 중 오류가 발생했습니다: {e}")
코드 핵심 포인트
starttls(): 보안 강화를 위해 통신 구간을 암호화하는 메서드로, 로그인 전 필수적으로 호출해야 합니다.MIMEText(body, 'plain', 'utf-8'): 한글이 포함된 메일 본문이 깨지지 않도록 UTF-8 인코딩을 지정해 주는 설정입니다.
4. 엑셀 연동으로 대량 메일 안전하게 보내기 및 차단 방지 팁
실무에서는 엑셀에 저장된 수십 명의 수신자 정보를 읽어와 반복문(for문)을 돌며 개인화된 메일을 보내게 됩니다. 이때 너무 빠른 속도로 대량의 메일을 연속 발송하면 메일 서버에서 스팸(Spam) 계정으로 판단하여 계정을 일시 정지시킬 수 있습니다.
대량 메일 발송 시 주의해야 할 3가지 팁
time.sleep()으로 발송 간격 두기: 메일을 한 건 보낼 때마다time.sleep(2)정도의 지연 시간을 주어 사람처럼 자연스럽게 발송되도록 조절합니다.제목과 본문의 개인화: 모든 메시지가 100% 동일하면 스팸 필터에 걸리기 쉽습니다. 엑셀 데이터를 활용해
f"안녕하세요 {name}님"형태로 수신자 이름을 본문에 녹여 넣는 것이 좋습니다.한 번에 너무 많은 대량 발송 지양: 일반 개인 계정(Gmail/Naver)은 일일 메일 발송 한도(약 500~1,000건)가 존재하므로, 대규모 마케팅 메일은 대량 발송 전용 서비스(Mailchimp 등)를 이용하는 것이 안전합니다.
핵심요약
파이썬으로 메일을 발송하려면
smtplib와email모듈을 활용하며, 메일 계정의 '2단계 인증' 및 '앱 비밀번호' 설정이 필수적입니다.메일 본문 생성 시
MIMEText에utf-8인코딩을 명시해야 한글 깨짐 현상을 방지할 수 있습니다.대량 메일 발송 시 계정 차단 및 스팸 분류를 예방하려면 메일 건당
time.sleep()지연 시간을 두고, 엑셀 데이터를 결합해 맞춤형 본문을 작성해야 합니다.


0 댓글