eccubeとlightsailで独自ECサイトを作る。その2(SESを使って新規会員登録のメール送信)
SES(Simple Email Service)は、Route53(DNSサーバ)を使わないとダメなのかな?と思ったけど、普通にDNSサーバに所有者を示すTXTレコードを置けば大丈夫だった。
1, SESの管理画面に行って、Verify a New Domainボタンを押して、独自ドメインを入力
2, DNSサーバにMXレコードと所有者を示すTXTレコードを配置。数分待つとverifiedされる
※DKIM(DomainKeys Identified Mail)もCNAMEレコード2~3個を作るだけなので、やっておいた方が良い(しないとgmailでは、amazonses.com経由と表示される。送信ドメインサーバが違うため)
3, Send a Test Emailボタンで送信テストすると送信できない!
Email address is not verified. The following identities failed the check in region AP-NORTHEAST-1
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html
SESのサイドバーのSending Statisticsで、こういう風に使いたいんだよ~と申請するとAWSが許可してくれるまで、サンドボックスは続く…。と思ったら、すぐ送信できるようなった(苦笑)
4, SESのSMTPアカウントを作成
https://qiita.com/s-katsumata/items/94c947e3b7b71c8b6ee3
サイドバーのSMTP SettingsのCreate My SMTP Credentialsボタンを押すと、IAM Userを作り始める…。
1 ユーザーが正常に作成されました。
これは、SMTP セキュリティ認証情報をダウンロードできる唯一の機会です。SMTP ユーザーの認証情報はユーザーの作成時のみ利用できます。保護のため、誰とも SMTP 認証情報を共有しないでください。
と恐ろしい感じで、SMTPの接続アカウントが表示される。
5, lightsailのSSH接続でメール送信する事ができる。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-email-smtp-client-command-line.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# SMTPユーザ名をbase64でエンコード echo -n "SMTPユーザ名" | openssl enc -base64 Base64EncodedSMTPUserNameが表示される # SMTPパスワードをbase64でエンコード echo -n "SMTPパスワード" | openssl enc -base64 Base64EncodedSMTPPasswordが表示される # input.txtというメール送信コマンドファイルを作っておく EHLO example.com AUTH LOGIN Base64EncodedSMTPUserName Base64EncodedSMTPPassword MAIL FROM: sender@example.com RCPT TO: recipient@example.com DATA X-SES-CONFIGURATION-SET: ConfigSet From: Sender Name <sender@example.com> To: recipient@example.com Subject: Amazon SES SMTP Test This message was sent using the Amazon SES SMTP interface. . QUIT |
SESを使った手動メール送信
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# メール送信コマンドファイルを使って送信 openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.ap-northeast-1.amazonaws.com:587 < input.txt depth=2 C = US, O = Amazon, CN = Amazon Root CA 1 verify return:1 depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon verify return:1 depth=0 CN = email-smtp.ap-northeast-1.amazonaws.com verify return:1 250 Ok 250-email-smtp.amazonaws.com 250-8BITMIME 250-STARTTLS 250-AUTH PLAIN LOGIN 250 Ok 334 VXNlcm5hbWU6 334 UGFzc3dvcmQ6 235 Authentication successful. 250 Ok 250 Ok 354 End data with <CR><LF>.<CR><LF> 250 Ok 01010160d7de98d8-21e57d9a-JZho-416c-bbe1-8ebaAexample-000000 451 4.4.2 Timeout waiting for data from client. |
サンプルコードの X-SES-CONFIGURATION-SET: ConfigSet があるとエラーでメール送信できなかった。
554 Configuration Set does not exist: Configuration set
6, eccubeからSESでメール送信できるようにする
eccubeフォルダに.envファイルがあるので設定する。
SESリージョンのURL
MAILER_URL=smtp://SESリージョンのURL:587?encryption=tls&auth=login&username=&password=
なぜか、日本リージョンだとSMTP認証に失敗する…。オレゴンリージョンでSESを作り直したら、普通に送信された(日本リージョンはメール受信出来ないのでオレゴン一択で良いかも)
Exception occurred while flushing email queue: Failed to authenticate on SMTP server with username
“ユーサ名” using 1 possible authenticators. Authenticator LOGIN returned Expected
response code 235 but got code “535”, with message “535 Authentication Credentials Invalid