【AWS】Amazon SES ~ 入門編 ~

■ はじめに

 AWS の Emailサービス である
Amazon SES (Simple Email Service) について扱う。

目次

【1】Amazon SES (Simple Email Service)
 1)料金
 2)サポート・リージョン
【2】制限
 1)送信制限の管理
 2)E メールのサイズ制限
 3)送信数制限
 4)受信できるメッセージにはサイズの制限
【3】使用上の注意
 1)バウンス率/苦情率について
【4】JavaでのMail送信
 1)AWS SDK for Javaを使う方法
 2)JavaMailを使う方法
【5】Java以外でのMail送信
【6】トラブルシューティング
 1)エラー「Email address is not verified」が発生

 【1】Amazon SES (Simple Email Service)

 * Eメール送受信(昔の情報だと送信のみサポートだが、現在は受信もサポート)
 * Transport Layer Security(TLS)を使用して暗号化
  => メール送信に使用される TLS バージョン : TLS v1 のみをサポート

 1)料金

https://aws.amazon.com/jp/ses/pricing/

 2)サポート・リージョン

* Tokyoリージョンは、2017/04/29現在時点ではサポートしてない? 

http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/regions.html#region-select

 * 米国東部(バージニア北部)
 * 米国西部 (オレゴン)
 * 欧州 (アイルランド)

 【2】制限

 * 詳細は以下の公式サイトを参照のこと

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/limits.html

1)送信制限の管理

http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/manage-sending-limits.html

 2)E メールのサイズ制限

 * 最大10MB のEメールメッセージを送信可能

 3)送信数制限

 * 送信するそれぞれのメッセージ当たり、最大 50 通の受信者まで
  (To:、CC:、 Bcc: の合計受信者数が 50 まで) 

 4)受信できるメッセージにはサイズの制限

 * メッセージを Amazon S3 バケットに保存するよう選択した場合、
   メッセージの最大サイズ (ヘッダーを含む) は 30 MB
 * Amazon SNS 通知を介してメッセージを受信するよう選択した場合、
   メッセージの最大サイズ (ヘッダーを含む) は 150 KB 

 【3】使用上の注意

http://d36cz9buwru1tt.cloudfront.net/jp/wp/AWS_Amazon_SES_Best_Practices.pdf

 * 基本的に、バウンス率/苦情率を以下のように維持する必要がある
   + ハードバウンス率は 5% 以下
   + 苦情率は 0.1% 未満

 1)バウンス率/苦情率について

バウンス(不達、Bounce)とは?

1) ハードバウンス (★こっちが重要★)
 =>「メールボックスが存在しない」などの恒久的な理由で、メールが到達しなかった場合

2) ソフトバウンス
 =>「メールボックスの容量超過」などの一時的な理由で、メールが到達しなかった場合

苦情(Complaint)とは?

 * メールクライアントが、メールを「スパムとして報告」ボタンをクリックすると、
   プロバイダ(ISP;Internet Services Provider)はこのことを苦情として記録する。

対策

 * 以下の公式サイトを参照

http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/best-practices-bounces-complaints.html
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/notifications-via-email.html#notifications-via-email-enabling

 【4】JavaでのMail送信

1)AWS SDK for Javaを使う方法
2)JavaMailを使う方法

 1)AWS SDK for Javaを使う方法

http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-java.html

 2)JavaMailを使う方法

http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-smtp-java.html

 * JavaMail 1.5 以上が必須?推奨?
 * Transport Layer Security (TLS)が必要
 * ポート25, 465, 587が使える
ポート番号 説明 備考
25 SMTPの標準ポート
465 SMTP over SSL (SMTPs) 最初から暗号化して通信を行う
587 SMTP TLS/STARTTLS セッション開始時は平文。クライアントから STARTTLS コマンドを送信した時点で暗号化。

http://www.atmarkit.co.jp/ait/articles/0811/21/news170.html

JavaMailでTransport Layer Security (TLS)を使う設定

Properties props = new Properties();

props.put("mail.smtp.auth", "true");  
props.put("mail.smtp.starttls.enable", "true");  
props.put("mail.smtp.starttls.required", "true"); 

詳細は以下の関連記事を参照のこと https://dk521123.hatenablog.com/entry/36860639
https://dk521123.hatenablog.com/entry/36867883

【5】Java以外でのMail送信

以下のMail送信については、以下の関連記事を参照のこと。

* Python
* AWS CLI

Amazon EMR ~ EMR内部 から SES で Email を送る ~
https://dk521123.hatenablog.com/entry/2021/07/09/115553

 【6】トラブルシューティング

 * 例外が発生したら、以下の公式サイトが役に立つかも...

http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/smtp-response-codes.html
http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/ses-errors.html

実際に以下の例外が発生して、参考にした。

1)エラー「Email address is not verified」が発生

例外内容

STARTTLS is required but host does not support STARTTLS

554 Message rejected: Email address is not verified.
The following identities failed the check in region EU-WEST-1: xxx@yyyy

原因

 Amazon SES で確認していない E メールアドレスまたはドメインから
 E メールを送信しようとしているため。
=> SES で、Emailを送受信する際には、
  一度、そのメールを検証(確認)する必要がある
 
# 指定したアドレスを変えたり、
# 通るアドレスを自分自身で送るなどして切り分けてみる

解決案

* AWSコンソールの「SES」画面でEmail検証を行う。
 => 詳細は、以下の公式サイトを参照。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/creating-identities.html

 参考文献

 公式サイト
http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/Welcome.html
http://d36cz9buwru1tt.cloudfront.net/jp/wp/AWS_Amazon_SES_Best_Practices.pdf
 その他のサイト
http://dev.classmethod.jp/cloud/aws/amazon-ses-build-and-practice/
http://qiita.com/zaru/items/4be9b55ba807670cf224
http://blog.takuros.net/entry/20130625/1372168404
https://www.cuenote.jp/library/marketing/aws.html
 Javaでの送信
http://kumasoft.blogspot.jp/2014/01/javamail-amazonses.html
http://dev.classmethod.jp/cloud/display-sender-for-aws-amazon-ses/
http://frmmpgit.blog.fc2.com/blog-entry-129.html

関連記事

Amazon SNS ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/06/03/175213
Amazon SNS ~ 基本編 / Email ~
https://dk521123.hatenablog.com/entry/2021/10/14/092313
Amazon EMR ~ EMR内部 から SES で Email を送る ~
https://dk521123.hatenablog.com/entry/2021/07/09/115553
Apache Airflow ~ 通知あれこれ編 ~
https://dk521123.hatenablog.com/entry/2021/10/06/141323
JavaでEmail ~ JavaMail / Text ~
https://dk521123.hatenablog.com/entry/2016/07/16/222422
JavaでEmail ~ JavaMail / 添付ファイル ~
https://dk521123.hatenablog.com/entry/2016/07/17/023459
JavaでEmail ~ SMTP認証 ~
https://dk521123.hatenablog.com/entry/2016/11/07/215251
JavaでEmail ~ SMTP認証 / DIGEST-MD5
https://dk521123.hatenablog.com/entry/2016/12/07/222229
JavaでEmail ~ JavaMail / TLS
https://dk521123.hatenablog.com/entry/2017/05/03/163219
JavaでEmail ~ JavaMail / Return-Path・Errors-To ~
https://dk521123.hatenablog.com/entry/2017/05/07/000344