아미(아름다운미소)

Python 메일 보내기 (SMTP Mail) 본문

랭귀지/PYTHON

Python 메일 보내기 (SMTP Mail)

유키공 2018. 9. 3. 10:36

메일 보내기 (SMTP Mail)

파이썬에서 이메일을 보내기 위해서는 파이썬에 기본 내장된 smtplib 라는 모듈을 사용합니다. SMTP는 Simple Mail Transfer Protocol의 약자로서 메일을 보내는데 사용되는 프로토콜입니다. 개인이나 회사가 SMTP 서버를 설치해서 이를 통해 메일을 발송할 수 있지만, 요즘은 구글, 마이크로소프트 등 많은 회사들이 SMTP 서버를 사용할 수 있도록 오픈하고 있기 때문에 이들 SMTP 서버를 사용해서 메일을 발송할 수 있습니다.

메일 ProviderSMTP 서버명, 포트
Livesmtp.live.com, 587
GMailsmtp.gmail.com, 587

파이썬에서 SMTP 서버에 접속하기 위해서는 smtplib 모듈을 import 한 후, SMTP 서버와 포트로 SMTP 객체를 생성합니다. SMTP 서버의 Encryption 방식에 따라 TTL 혹은 SSL을 사용하는데, TLS을 사용하는 경우 smtplib.SMTP()를, SSL을 사용하는 경우 smtplib.SMTP_SSL() 을 사용합니다. TLS는 보통 포트 587을, SSL은 465를 사용합니다.

SMTP 객체를 생성한 후에는 프로토콜 상 가장 먼저 SMTP 서버에 Hello 메시지를 보내는데, ehlo() 메서드가 이 기능을 합니다. Hello 메시지 이후, TLS 인 경우는 starttls() 를 실행하여 TLS Encryption을 시작하는데, SSL인 경우에는 이 메서드를 호출하지 않습니다.

# -*- coding:utf-8 -*-
 
import smtplib
from email.mime.text import MIMEText
 
smtp = smtplib.SMTP('smtp.live.com', 587)
smtp.ehlo()      # say Hello
smtp.starttls()  # TLS 사용시 필요
smtp.login('test@live.com', 'password')
 
msg = MIMEText('본문 테스트 메시지~')
msg['Subject'] = '테스트~'
msg['To'] = 'test@naver.com'
smtp.sendmail('test@live.com', 'test@naver.com', msg.as_string())
 
smtp.quit()

이렇게 기본 연결을 마친 후, login(계정, 암호) 메서드를 호출하여 계정과 암호를 넣고 사용자 인증을 받게 됩니다. 이후, sendmail(송신자, 수신자, 메시지) 메서드를 사용하여 메일을 보내게 되는데, 여기서 메시지는 간단한 메시지의 경우는 email.mime.text.MIMEText 을, 좀 더 복잡한 메시지의 경우는 email.mime.multipart.MIMEMultipart 등을 사용할 수 습니다. 마지막으로 SMTP와 연결을 끊고 종료하기 위해서는 quit() 메서드를 호출합니다.

Comments