이메일 전송 서비스 SES

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

SES SMTP로 메일 보내기

SES에서 제공하는 SMTP 프로토콜을 이용하여 메일을 보내는 방법을 알아보겠습니다. 왼쪽 메뉴에서 SMTP Settings를 클릭합니다. SMTP Settings 페이지에 SES의 SMTP 서버 주소와 포트가 표시됩니다. 이제 SMTP 접속에 필요한 IAM 사용자와 비밀번호를 생성해야 하므로 Create My SMTP Credentials 버튼을 클릭합니다.


그림 27-33 SES SMTP 설정

SES SMTP용 IAM 사용자를 생성합니다. Create 버튼을 클릭합니다.


그림 27-34 SES SMTP용 IAM 사용자 생성

SES SMTP용 IAM 사용자 생성이 완료되었습니다. Show User Security Credentials를 클릭하면 IAM 사용자의 액세스 키와 시크릿 키를 확인할 수 있습니다. 이 부분을 복사해서 따로 보관하거나 Download Credentials 버튼을 클릭하여 액세스 키, 시크릿 키 파일을 다운로드합니다. 그리고 Close를 클릭합니다.


그림 27-35 IAM 사용자 생성 완료, 액세스 키 다운로드

Windows에서는 PowerShell을 사용하면 편리합니다. 메모장이나 기타 텍스트 편집기를 열고 아래와 같이 작성한 뒤 sessmtp.ps1로 저장합니다. $username과 $password 부분은 여러분들이 생성한 SES SMTP용 IAM 사용자의 액세스 키와 시크릿 키를 입력해야 합니다.

sessmtp.ps1

$from = "noreply@<도메인>"
$to = "user1@example.net"
$smtpServer = "email-smtp.us-west-2.amazonaws.com"
$smtpPort = "587"
$username = "AKIAIFA4PIEQ2I66E57Q"
$password = "AuVre+PUrntyYO5Fb62awoXvwBSYfp2ZB2MNmRhoRxfW"
$subject = "Hello"
$body = "Hello SES SMTP"

$smtp = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort)

$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$smtp.Send($from, $to, $subject, $body)

Windows에서 PowerShell을 실행(시작 → 실행 → powershell)하고 아래와 같이 입력하면 ps1 파일을 실행할 수 있습니다.

PS C:\Users\pyrasis> .\sessmtp.ps1

Linux에서는 준비 과정이 약간 필요합니다. 터미널을 실행한 뒤 다음과 같이 SES SMTP용 IAM 사용자의 액세스 키와 시크릿 키를 BASE64로 인코딩합니다.

pyrasis@ubuntu:~$ echo -n "AKIAIFA4PIEQ2I66E57Q" | base64
QUtJQUlGQTRQSUVRMkk2NkU1N1E=
pyrasis@ubuntu:~$ echo -n "AuVre+PUrntyYO5Fb62awoXvwBSYfp2ZB2MNmRhoRxfW" | base64
QXVWcmUrUFVybnR5WU81RmI2MmF3b1h2d0JTWWZwMlpCMk1ObVJob1J4Zlc=

다음과 같이 SMTP 명령을 텍스트 편집기에 작성합니다. AUTH LOGIN 다음 줄에 두 줄은 위에서 SES SMTP용 IAM 사용자의 액세스 키와 시크릿 키를 BASE64로 인코딩한 값입니다. 맨 마지막 .(점) 다음 줄에 빈 줄이 하나 더 있습니다(SMTP 명령으로 메일을 보내는 규칙입니다).

AUTH LOGIN
QUtJQUlGQTRQSUVRMkk2NkU1N1E=
QXVWcmUrUFVybnR5WU81RmI2MmF3b1h2d0JTWWZwMlpCMk1ObVJob1J4Zlc=
MAIL FROM:noreply@<도메인>
RCPT TO:user1@example.net
DATA
Subject:Hello

Hello SES SMTP
.

작성이 완료되었으면 이 SMTP 명령을 모두 선택하여 복사한 상태로 다음 실습을 진행합니다.

터미널에서 아래와 같이 openssl 명령으로 SMTP 서버에 접속한 뒤에 방금 복사한 SMTP 명령을 터미널에 붙여 넣습니다. SMTP 명령을 한 줄 한 줄 입력해도 되지만 사람이 입력하는 속도로는 금방 Timeout 에러로 접속이 끊어져버립니다.

pyrasis@ubuntu:~$ openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465
depth=2 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2006 VeriSign, Inc. - For authorized use only", CN = VeriSign Class 3 Public Primary Certification Authority - G5
verify error:num=20:unable to get local issuer certificate
verify return:0
## email-smtp.amazonaws.com ESMTP SimpleEmailService-700638183 KOh7WvuL4d1dyglWiR01
AUTH LOGIN
QUtJQUlGQTRQSUVRMkk2NkU1N1E=
QXVWcmUrUFVybnR5WU81RmI2MmF3b1h2d0JTWWZwMlpCMk1ObVJob1J4Zlc=
MAIL FROM:noreply@gaas.io
RCPT TO:pyrasis@gmail.com
DATA
Subject:Hello

Hello SES SMTP
.
## VXNlcm5hbWU6
## UGFzc3dvcmQ6
## Authentication successful.
## Ok
## Ok
## End data with <CR><LF>.<CR><LF>
## Ok 000001465e2b62b4-47697d01-f691-423a-8a0c-c8847e33250f-000000

이처럼 SES SMTP로 메일을 보낼 수 있습니다. Java, JavaScript, Python, Ruby, PHP 등의 언어에서 는 각 언어별로 SMTP API가 있고, SMTP API를 이용하면 손쉽게 메일을 보낼 수 있습니다. AWS API를 이용하여 메일을 보내려면 ‘30.12 SES’를 참조하기 바랍니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.