Amazon SES で SMTP を使ってメール送信したい場合、IAM User の credentials をちょいと加工してやる必要があります。
これで、変換した値が正しいことを確認するために実際にメールの送信を試すわけですが、使えるメール送信ツールがないという場合に openssl コマンドでやればいっかということでメモ。
SMTP 認証は PLAIN 方式とすることにしたので次のコマンドの出力を AUTH PLAIN コマンドの引数として渡します。
printf "${USERNAME}\0${USERNAME}\0${PASSWORD}" | base64 -w 0
接続は port 587 に対して STARTTLS を使います。
openssl s_client \
-connect email-smtp.ap-northeast-1.amazonaws.com:587 \
-starttls smtp -crlf -quiet
ここで -quiet
か -ign_eof
をつけない場合、terminal から R
とか Q
を type した際に renegotiate や close 扱いとなり、切断されてしまうので注意。(RCPT TO コマンドを送ろうとして失敗します)
OpenSSL が version 3.2 であれば -nocommands
でも可。(openssl s_client / CONNECTED-COMMANDS)
あとは普通の SMTP 通信なので
> EHLO example.com
< 250-email-smtp.amazonaws.com
< 250-8BITMIME
< 250-STARTTLS
< 250-AUTH PLAIN LOGIN
< 250 Ok
> AUTH PLAIN (上記で base64 encode した値)
< 235 Authentication successful.
> MAIL FROM: sender@example.com
< 250 Ok
> RCPT TO: receipient@example.com
< 250 Ok
> DATA
< 354 End data with <CR><LF>.<CR><LF>
> Subject: test
>
> test
> .
< 250 Ok xxxxx
> QUIT
< 221 Bye
てな具合です。