영벨롭 개발 일지

[Python]파이썬으로 이메일 보내기 - SMTP 본문

Programming Language/Python

[Python]파이썬으로 이메일 보내기 - SMTP

영벨롭 2022. 5. 3. 14:29

[ SMTP 란? ]

 

 SMTP(Simple Mail Transfer Protocol)은 말 그대로 이메일을 주고 받을 수 있는 프로토콜입니다. 이 과정에서 IMAP이라는 프로토콜도 사용하게 되는데, IMAP은 메일 수신을 위한 프로토콜입니다. 

 

 client A가 SMTP를 통해 A의 이메일 server로 메일을 보내면 B의 이메일 server와 STMP를 통해 이메일을 주고 받고

 B의 server가 IMAP을 통해 client B에 이메일을 보내주는 과정을 거쳐 우리는 이메일을 주고받을 수 있게 됩니다. 

 

출처: https://hudi.blog/static/476097357856c48ebfad6ca41432c8b6/64756/1.png

 

 

 

 

 

[ 사용 방법 ]

 

 메일 전송을 요청할 때, 우리는 서버가 이해할 수 있는 형태인 MIME 형태로 변환하여 메일을 작성해야 합니다. 

 

 MIME(Multipurpose Internet Mail Extensions)은 메일 작성을 위한 표준적인 형식을 의미합니다. 

 

 

 파이썬에서 SMTP를 사용하기 위해선 파이썬 내장 라이브러리 smtplib를 사용합니다. 또한 이메일을 MIME 형태로 변환하기 위해 EmailMessage 모듈을 import합니다. 

 

import smtplib
from email.message import EmailMessage

 

 

  • 텍스트 이메일 보내기
import smtplib
from email.message import EmailMessage

# STMP 서버의 url과 port 번호
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 465

# 1. SMTP 서버 연결
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)

EMAIL_ADDR = '본인의 이메일 계정'
EMAIL_PASSWORD = '본인의 이메일 계정 비밀번호'

# 2. SMTP 서버에 로그인
smtp.login(EMAIL_ADDR, EMAIL_PASSWORD)

# 3. MIME 형태의 이메일 메세지 작성
message = EmailMessage()
message.set_content('이메일 본문')
message["Subject"] = "이메일 제목"
message["From"] = EMAIL_ADDR  #보내는 사람의 이메일 계정
message["To"] = '받는 사람의 이메일 계정'

# 4. 서버로 메일 보내기
smtp.send_message(message)

# 5. 메일을 보내면 서버와의 연결 끊기
smtp.quit()

 

 

  • 사진 첨부
import imghdr #이미지 첨부를 위한 라이브러리
import smtplib
from email.message import EmailMessage

# STMP 서버의 url과 port 번호
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 465

# 1. SMTP 서버 연결
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)

EMAIL_ADDR = '본인의 이메일 계정'
EMAIL_PASSWORD = '본인의 이메일 계정 비밀번호'

# 2. SMTP 서버에 로그인
smtp.login(EMAIL_ADDR, EMAIL_PASSWORD)

# 3. MIME 형태의 이메일 메세지 작성
message = EmailMessage()
message.set_content('이메일 본문')
message["Subject"] = "이메일 제목"
message["From"] = EMAIL_ADDR  #보내는 사람의 이메일 계정
message["To"] = '받는 사람의 이메일 계정'

# 3-1. 이메일에 사진 첨부하기
with open('사진경로', 'rb') as image:
  image_file = image.read() # 이미지 파일 읽어오기

image_type = imghdr.what('e-mail', image_file)
message.add_attachment(image_file, maintype = 'image', subtype = image_type)


# 4. 서버로 메일 보내기
smtp.send_message(message)

# 5. 메일을 보내면 서버와의 연결 끊기
smtp.quit()
반응형