今回は、独自ドメインを Amazon Route 53 に登録して Amazon SES(Simple Email Service)で SMTP 認証を利用してメールを送信する手順を解説します。
最終的には Linux マシンよりコマンドラインでメールを送信できるように設定します。
過去には以下のように SES を利用してメールを送信する手順・受信する手順を解説しました。
【AWS】Route53 に「お名前.com」取得の独自ドメインを登録して Amazon SES(Simple Email Service)で SMTP プロトコルでメールを送信する手順
【AWS】Route53に「お名前.com」取得の独自ドメインを登録してSES(Simple Email Service)で無料でメールを受信する手順
ようやく SES(Simple Email Service)が東京リージョンで利用できるようになった(2020年7月)
今まで SES は東京リージョンで利用できませんでした。
なぜ東京リージョンだけ外されているんだろう、と疑問に思ってきましたが、AWSの営業?エンジニア?セールスエンジニア?の方と会話した際に「日本はまだまだキャリアメールが多数あってサポートが出来なくて・・・」というようなことを言っていたと思いますが、とうとう東京リージョンでも SES がサポートされるようになりました。
日本国内には Docomo、au、Softbank と3大キャリアがあり、それぞれがキャリアメールを持っていますが、今まで SES はキャリアメールに対して相性が良くない(つまりメールの到達性が低い)と言われてきました。
しかし、2020年7月に東京リージョンでも SES が使えるようになったということは、キャリアメールへの到達性が高くなるような改善をしたのか、それとも今キャリアメールを使っている人の方が少数派になったので問題ないと判断したのか、それとも AWS が大きくなりすぎて逆にキャリアメールの方が仕様を変えてきたのか・・・ということでしょうか。
諸事情は AWS のエンジニアに聞いてみたいと思います。
Amazon SES 東京リージョン対応のお知らせ
https://aws.amazon.com/jp/blogs/news/amazon-ses-tokyo/
独自ドメインを Route 53 に登録する
まずは独自ドメインを「Route 53」に登録します。
独自ドメインはお名前ドットコムで取得したものでもいいですし、どこで取得したドメインでも構いません。
過去にお名前.comで取得した独自ドメインを Amazon Route 53に登録する手順を解説したので、お名前.com で取得している場合はこちらを参考にしてドメインを登録します。
【AWS】お名前.com で取得した独自ドメインを Amazon Route 53 で名前解決して EC2 インスタンスの Web サーバーにアクセスさせる手順]
AWS 管理コンソールにログインし「サービス」より「ネットワーキング&コンテンツ配信」–「Route 53」をクリックします。
「DNS management」の「Get started now」ボタンをクリックします。
左側ペインより「Hosted zones」をクリックし「Create Hosted Zone」ボタンをクリックします。
「Created Hosted Zone」ボタンをクリックして下図のように「You have no hosted zones」のメッセージが表示されたら再度「Create Hosted Zone」ボタンをクリックします。
Create Hosted Zone の画面が表示されたら以下のように設定します。
- Domain Name ← 独自ドメイン名を入力します。(例:example.comなど)
- Type ← 「Public Hosted Zone」を選択します。
設定が完了したら「Create」ボタンをクリックします。
登録が完了すると、下図のように AWS のネームサーバーが4つ表示されます。
この4つのネームサーバーをドメインを取得したドメイン管理会社(ドメイン再販業者、レンタルサーバー会社)にてネームサーバーを設定・登録します。
Amazon SES(Simple Email Service)での設定手順
ここから Amazon SES(Simple Email Service) の設定をします。
Amazon SES(Simple Email Service) とは
Amazon SES は、メール送信とメール受信の両方が可能です。
過去に SES を利用してメールを受信する手順を解説しましたが以下がその記事です。
【AWS】Route53に「お名前.com」取得の独自ドメインを登録してSES(Simple Email Service)で無料でメールを受信する手順
■料金
Amazon SES 料金
https://aws.amazon.com/jp/ses/pricing/
SES の料金ですがスパムメール並みにメール送信をしなければ低価格に抑えることができます。
SES に添付ファイルを付けて送信することもできます。
- 月に 62,000 件までは無料。(0円、0 USD)それ以上のメール送信については 1,000 件ごとに 0.10 USD(11円)。
- メール送信時の添付ファイル 1 GB につき 0.12 USD(13円)。
■メール送信形式
SMTP エンドポイントを利用する場合です。
- ポート 25番、465番(SMTP over SSL)、587番(Message Submission)が利用できます。
- いずれも認証(SMTPユーザーとパスワード)が必要です。
- TLS が必須です。
HTTP REST API を利用する場合です。
- アプリケーションから直接メール送信ができます。
- 認証はアクセスキーとシークレットアクセスキーで行います。
Amazon SES(Simple Email Service)での設定手順
AWS の管理コンソールにログインし「サービス」より「カスタマーエンゲージメント」–「Simple Email Service」をクリックします。
2020年7月より東京リージョンで「Amazon SES(Simple Email Service)」が利用可能になりましたので東京リージョンで SES を利用します。
ドメイン認証をする
初めに「ドメイン認証」をします。
Amazon SES でのメールの送受信に使用するドメイン(例えば、tama-chan.com など)に関しては、自身がそのドメインを所有していることを証明する必要があります。
インターネットサービスプロバイダ(ISP)と Amazon SES の信頼関係を維持するために、Amazon SES は送信者が本人であることを確認する必要があります。
したがって、送信者は送信アイデンティティを保護するために、Amazon SES 経由で送信するメールのドメインもしくは、送信元となるメールアドレスを確認して認証する必要があります。
認証には以下の2種類があります。
- ドメイン認証(送信元となるメールアドレスのドメインを検証する方法。例えば、TEXTレコードが入っているかどうか等)
- メール認証(送信元となるメールアドレスを検証する方法。例えば、test@tama-chan.com 等のメールを受信できるか)
今回は、ドメイン認証を利用します。(どちらかで認証できればOKです。両方やる必要はありません。)
すでに Route 53 に自身が所有しているドメインを登録しているのでワンクリックで簡単に認証ができます。
SES(Simple Email Service)のホーム画面より左ペインの「Dmains」をクリックします。
「Verify a New Domain」ボタンをクリックします。
「Verify a New Domain」画面で以下の情報を入力します。
- ドメイン名 ← お名前.com 等で取得して先ほど Route 53 に登録したドメイン名を入力します。
- Generate DMIK Setting ← DKIM(DomainKeys Identified Mail)を利用する場合はチェックを入れます。
「Verify This Domain」ボタンをクリックします。
DKIM(Domain Keys Identified Mail)とは
DKIM(Domain Keys Identified Mail)とは
①正当ドメイン保持者(ドメイン所有者)からメール送信されたことをチェックする
②改ざんされていないメールかどうかをチェックする
デジタル署名方式の送信元ドメイン認証技術のことを言います。
送信元と受信側で以下の役割を持っています。
- 送信元(SMTPサーバー) ← メールを送信する際に、秘密鍵を使って生成したデジタル署名を行う
- 受信側 ← 送信元(SMTPサーバー)の公開鍵を利用して検証をする
以下のように「DKIM Record Set」が生成されることを確認します。
続けて、このドメインを「Route 53」に登録します。
「Use Route 53」ボタンをクリックします。
※ドメインを Route 53 に登録して利用するとこのように各 AWS サービスと連携を取るのが簡単になるのでお勧めです。
設定直後は以下のように「pending」になっています。
ドメイン認証の確認
1時間程度待ち、以下のようなステータスになっていることを確認します。
※通常は1時間どころか数分レベルで認証が完了します。
- Verification Status ← verified
- DKIM Status ← verified
- Enabled for Sending ← Yes
数分後に下図のようなメールを受信することを確認します。
「You are now able to send email through Amazon SES and Amazon Pinpoint from any address within this domain.」とあるので、例えばドメインが「tama-chan.com」なら「test@tama-chan.com」でも「info@tama-chan.com」等、どのメールアドレスでもメール送信が可能になります。
また、DKIM 設定後も別途下図のような認証メールが届きます。
SMTP 認証用アカウントの作成
次に SMTP 認証アカウントを作成します。
SES のホーム画面より左側ペインの「SMTP Settings」をクリックします。
「Create My SMTP Credntials」ボタンをクリックします。
IAM ユーザー名(下図はデフォルトのユーザー名です)を確認し「作成」ボタンをクリックします。
「認証情報のダウンロード」ボタンをクリックして認証情報を保存します。
認証情報が記載されている CSV ファイルをダウンロードすると以下のような形式で「SMTP ユーザー名」と「SMTP パスワード」が記載されています。
mailx コマンドでのメール送信手順
上記の設定で SES 側の設定が完了したので、最後に mailx コマンドでメール送信確認をします。
mailx コマンドがインストールされた Linux サーバにログインします。
[root@test001 ~]# cat /etc/redhat-release |
もし mailx コマンドがインストールされていない場合は以下のコマンドで mailx コマンドをインストールします。
[root@test001 ~]# yum install mailx |
以下のように mail(mailx)コマンドを実行するアカウントのホームディレクトリに「.mailrc」ファイルを作成します。
[root@test001 ~]# pwd [root@test001 ~]# cat .mailrc |
https://docs.aws.amazon.com/general/latest/gr/ses.html
以下のように mailx コマンドを実行します。
[root@test001 ~]# echo “メール本文です。最後にピリオドを追加します。.” | mailx -v -s “タイトルを入力します。” xxxx@gmail.com ← xxxx@gmail.comはメール送信先です。 |
メールが送信されていることを確認します。
Error in certificate: Peer’s certificate issuer is not recognized.のエラーメッセージを消す手順
メールは問題なく送信されているのですが、mailx コマンドを実行すると「Error in certificate: Peer’s certificate issuer is not recognized.」のエラーメッセージが表示されています。
メールは送信されているのですが、エラーが出ていると後ほど何かしら影響が出る可能性があるのでエラーを消す対応をします。
以下のサイトを参考にさせていただきました。
Amazon SES + mailx で「Error in certificate: Peer’s certificate issuer is not recognized.」が出た時の対処法
.mailrc ファイルを確認すると「nss-config-dir」の設定が「/etc/pki/nssdb/」ディレクトリに設定されています。
[root@test001 ~]# cat .mailrc ~ 省略 ~ set nss-config-dir=/etc/pki/nssdb/ ~ 省略 ~ [root@test001 ~]# |
certutil コマンドで /etc/pki/nssdb の中身を調べます。
nssdb に何も登録されていないことが分かります。
[root@test001 ~]# certutil -L -d /etc/pki/nssdb |
そもそも/etc/pki/nssdbは何か
nssdb は NSS 共有データベースです。
nss パッケージの情報です。
nss は「Network Security Services」です。
説明を翻訳すると「ネットワークセキュリティサービス(NSS)は、セキュリティ対応のクライアントアプリケーションとサーバーアプリケーションのクロスプラットフォーム開発をサポートするために設計された一連のライブラリです。NSS で構築されたアプリケーションは、SSL v2 と v3、TLS、PKCS#5、PKCS#7、PKCS#11、PKCS#12、S/MIME、X.509 v3 証明書、およびその他のセキュリティ標準をサポートできます。」となります。
[root@test001 ~]# yum info nss ネットワークセキュリティサービス(NSS)は、セキュリティ対応の クライアントアプリケーションとサーバーアプリケーションの クロスプラットフォーム開発をサポートするために設計された一連の ライブラリです。 NSS で構築されたアプリケーションは、SSL v2 と v3、TLS、PKCS#5、 PKCS#7、PKCS#11、PKCS#12、S/MIME、X.509 v3 証明書、およびその他の セキュリティ標準をサポートできます。 |
AmazonRootCAよりルート証明書をダウンロードしてインポートする
AmazonRootCA よりルート証明書をダウンロードしてインポートします。
まずは、ルート証明書をインポートするディレクトリを作成します。
[root@test001 ~]# mkdir -m 700 ~/.certs ← -m(–mode) オプションで 700 を指定してディレクトリを作成します。 |
certutil コマンドで ~/.certs ディレクトリを指定して新規のデータベースを作成します。
[root@test001 ~]# certutil -N -d ~/.certs |
Amazon よりルート証明書をダウンロードします。
[root@test001 ~]# wget https://www.amazontrust.com/repository/AmazonRootCA1.pem |
ルート証明書の内容です。
[root@test001 ~]# cat AmazonRootCA1.pem |
設定が完了したら .mailrc を修正します。
[root@test001 ~]# vi ~/.mailrc |
再度 mailx コマンドで動作確認をします。
[root@test001 ~]# echo “テストメールです.” | mailx -v -s “テストメールです。” xxxx@gmail.com |
Amazon SES のメール送信数制限を解除の依頼手順
デフォルトのままではメール送信数に制限があります。
以下の手順にて Amazon SES のメール送信数制限を解除して本運用をできるようになります。
メールの送信解除を依頼する場合は AWS 管理画面の上のメニューより「サポート」‐「サポートセンター」をクリックします。
「AWS Support Center」で「Create case」ボタンをクリックします。
「Create case」で「Service limit increase」を選択します。
以下のように「ケースの作成」画面が表示されるので解除してほしい制限と具体的な制限値を入力します。
また「申請理由の説明」に理由を記述します。
今回は例としてシステムからのメール送信の為というようなことを理由として挙げています。
- Limit type ← SES 送信制限 を選択します。
- メールの通知 ← システム通知 を選択します。
必要な項目を設定したら下にスクロールします。
以下のように設定をして下にスクロールします。
- リージョン ← Asia Pacific(Tokyo)
- Limit ← 希望する一日あたりの送信クォータ
- New limit value ← 希望する数値を入力します。(大体 50,000/日で許可されます。)
下図のように設定します。
- Use case description ← 申請の理由を記載します。(例:Amazon SES を利用してシステムよりメールを送信するため等)
設定が完了したら一番下の「Submit」ボタンをクリックします。
リクエストを送信したら AWS サポートからの回答を待ちます。
※大体1日くらいで AWS サポートより制限解除完了の通知が来ます。
申請をすると下図のメールが届きます。
解除されると下図のようなメールが届きます。
コメント