개요
Amazon Simple Email Service (SES)를 사용해보고 메일 송신을 위한 설정 과정을 정리해둔다.
순서
-
SMTP settings 메뉴에서 우측 상단의 “Create SMTP credentials” 버튼을 눌러서 SMTP 크레덴셜을 만들고 다운로드해둔다. CSV파일이다. 안에 SMTP 유저명과 패스워드가 적혀있다.
-
정당한 송신자인지를 AWS에게 보여줄 필요가 있다. 이를 위해 송신측 도메인을 인증하거나 (조금 어렵다) 이메일 주소의 소유자임을 인증한다(쉽다). 이메일 주소 인증은 이메일에 링크가 도착하면 그 링크에 접근하는 것으로 소유자임을 인증한다.
-
1번에서 받은 크레덴셜을 가지고 로컬환경에서 메일을 보내본다. 파이썬 코드도 정리해둔다.
- 각 항목을 적절히 변경해서 사용한다.
- 587번 포트를 사용한다. 25번 포트를 사용할 수 있다면 25번을 사용해도 무방하다.
# -*- coding: utf-8 -*-
import smtplib
from email.message import EmailMessage
def send_mail():
msg = EmailMessage()
msg['From'] = "FROM-EMAIL-ADDRESS"
msg['To'] = "TO-EMAIL-ADDRESS"
msg['Cc'] = "CC-EMAIL-ADDRESS"
msg['Subject'] = "Amazon SES Test"
content = f"Test Mail\r\n\r\n"
msg.set_content(content)
smtp_user_name = "SMTP-USER-NAME"
smtp_user_pw = "SMTP-USER-PASSWORD"
server = smtplib.SMTP('AWS-SMTP-SERVER-DOMAIN', 587)
server.starttls()
server.login(smtp_user_name, smtp_user_pw)
server.send_message(msg)
server.quit()
if __name__ == '__main__':
send_mail()
- 문제가 없었다면 EC2서버환경에서 메일을 보내본다. 이 때 EC2 Securtiy Group에서 아웃바운드 통신 제한을 하고 있다면 587포트를 허가해준다.
- SMTP서버 도메인의 IP가 계속 변하기 때문에 특정 IP만 허용하는 것은 어렵다. 모든 IP 주소에 대해 587포트를 허용할 수 밖에 없다. 또는 Dedicated IP 주소를 설정하는 방법도 고려할 수 있겠다.
참고
- SES는 Region별로 설정한다.
- SDK(boto3)를 사용해서 전송할 수도 있다고 한다.