이번 포스트에서는 파이썬으로 이메일을 보내는 방법에 대해서 알아보도록 하겠습니다. 파이썬에는 SMTP 프로토콜을 사용할 수 있게 해주는 smtplib이란 모듈이 있어서 매우 쉽게 이메일을 보낼 수 있습니다.
먼저 SMTP 프로토콜이 무엇인지 알아봅시다. SMTP는 Simple Mail Transfer Protocol의 약자로 한국어로 풀어 말하자면 이메일을 보내기 일종의 통신 규약입니다. SMTP를 이용하여 메일을 보내기 위해서는 SMTP 서버가 필요한데 요즘은 네이버나 구글 같은 대형 포털에서 자신들의 SMTP 서버를 오픈하였기 때문에 직접 설치하지 않고 이를 이용하면 편합니다.
파이썬에서 SMTP 서버에 접속하기 위해서는 smtplib 모듈을 import 한 후, SMTP 서버와 포트로 SMTP 객체를 생성합니다. SMTP 서버의 암호화 방식에 따라 TTL 혹은 SSL을 사용하는데, TLS을 사용하는 경우 smtplib.SMTP('서버명', 포트번호)를, SSL을 사용하는 경우 smtplib.SMTP_SSL('서버명', 포트번호) 함수를 이용합니다. 여기서는 지메일, 네이버 메일 모두 설정 가능한 SSL 방식을 이용하도록 하겠습니다.
# smtplib 모듈 소환
import smtplib
# 네이버에서 제공하는 SMTP 서버 접속
naver_server = smtplib.SMTP_SSL('smtp.naver.com', 465)
# 구글에서 제공하는 SMTP 서버 접속
google_server = smtplib.SMTP_SSL('smtp.google.com', 465)
SMPT() 함수든 SMTP_SSL() 함수든 인자로 '서버명'과 포트번호를 받습니다. TLS는 보통 포트 587을, SSL은 465를 사용하기 때문에 두 번째 인자에 위와 같이 465를 넣어 준 것입니다. 만약 SMTP() 함수를 사용한다면 587을 넣어주면 됩니다.
이렇게 연결한 후 서버에서 인증이 필요한 경우 login(아이디, 비밀번호) 함수를 호출하여 아이디와 비밀번호를 넣고 사용자 인증을 받아야 합니다. 네이버, 구글 서버 모두 인증이 필요합니다.
# 네이버에 로그인
naver_server.login('네이버 아이디', '네이버 비번')
# 구글에 로그인
google_server.login('구글 아이디', '구글 비번')
이후 sendmail(송신자, 수신자(리스트), 메시지) 함수를 사용하여 메일을 보내게 되는데, 여기서 메시지는 email 모듈을 이용해 만들어서 인자로 전달합니다. sendmail 함수를 사용하기 전에 먼저 메일의 메시지를 email 모듈을 이용하여 만들어 봅시다.
email 모듈에는 어떤 형태의 메시지를 보내느냐에 따라 다양한 함수들이 존재하지만 여기서는 제일 간단하게 메시지를 전달하는 MIMEText('메시지', ('메시지 형식'), ('문자열 타입')) 함수를 이용해 보도록 하겠습니다. 먼저 MIMEText 객체를 본문 내용과 함께 생성한 후 생성된 객체에 보내는 사람의 주소, 받는 사람의 주소, 제목을 추가하면 됩니다.
from email.mime.text import MIMEText
msg = MIMEText('내용이 들어가는 문자열', _charset='euc-kr')
msg['Subject'] = '제목'
msg['From'] = '보내는 사람 이메일 주소'
msg['To'] = '받는 사람 이메일 주소'
이제 다시 sendmail 함수로 돌아와 위에서 생선 된 메시지 객체를 넘겨주고 sendmail을 실행해 봅시다. 메시지 객체를 넘겨줄 때는 as_string을 이용하여 문자열로 바꾸어 넘겨주어야 합니다.
# 네이버 서버에서 메일 보내기
naver_server.sendmail('보내는 사람 주소', ['받는 사람 주소(들)'], msg.as_string())
# 구글 서버에서 메일 보내기
google_server.sendmail('보내는 사람 주소', ['받는 사람 주소(들)'], msg.as_string())
여기서 받는 사람 주소를 리스트로 여러 개 입력하여 한 번에 많은 사람들에게 같은 메일을 보낼 수 도 있습니다. 쉽죠?! ㅎㅎ 마지막으로 지금까지 과정을 정리한 코드입니다.
import smtplib
from email.mime.text import MIMEText
me = '보내는 사람 메일 주소'
you = '받는 사람 메일 주소'
contents = '내용'
msg = MIMEText(contents, _charset='euc-kr')
msg['Subject'] = '제목'
msg['From'] = me
msg['To'] = you
# 네이버 버전
naver_server = smtplib.SMTP_SSL('smtp.naver.com', 465)
naver_server.login('네이버 아이디', '네이버 비번')
naver_server.sendmail('보내는 사람 주소', ['받는 사람 주소(들)'], msg.as_string())
naver_server.quit()
# 구글 버전
# google_server = smtplib.SMTP_SSL('smtp.google.com', 465)
# google_server.login('구글 아이디', '구글 비번')
# google_server.sendmail('보내는 사람 주소', ['받는 사람 주소(들)'], msg.as_string())
# google_serve.quit()