無料DDNSとAmazon SESを使ってメール受信を行う

独自ドメインでメールを受信するためには、通常、ドメインの取得とメールサーバを用意する必要が有ります。
今回は、出来る限りお金をかけずに実現するために、DDNS(Dynamic DNS)とAmazon SESを使って無料で独自(サブ)ドメインメール受信を実現してみます。

# DDNSの申し込み
利用するDDNSは、以下2つの要件を満たす必要があります。

* MXレコードが利用できること(メール受信のため)
* TXTレコードが設定できること(後述します)

今回は[Dynamic DO](http://ddo.jp/)を利用します。

Dynamic DO!.jp - ダイナミックDNS -
http://ddo.jp/

「ddo.jp サブドメイン DDNS」の無料登録ができるので、適当なサブドメインを取得しましょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/e09873e0-79ea-e182-6c96-c8a181f4cbd7.png)

# MXレコードの追加
DDNSの登録が終わったら、MXレコードの登録をします。
Amazon SESでメールを受信できるようにするには、取得したサブドメインをAmazonのSES Eメール受信エンドポイントに向ける必要があります。
なお、Amazon SESは利用できるリージョンが限られているので、エンドポイントも利用するリージョンに合わせる必要があります。

[Amazon SES による E メール受信のための MX レコードの公開 - Amazon Simple Email Service](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/receiving-email-mx-record.html)

今回は米国東部（us-east-1)を利用します。
> 米国東部（バージニア北部） -> inbound-smtp.us-east-1.amazonaws.com

Dynamic DOの`各種申請`から`MX レコード・メール転送変更`へ進みます。
MXレコードの欄に優先順とAmazon SES Eメール受信エンドポイントを入力し登録します。

* 優先度 ： 10
* ホスト ： inbound-smtp.us-east-1.amazonaws.com

![image](https://qiita-image-store.s3.amazonaws.com/0/64811/a538f753-2781-6405-3e90-e94c56bc878c.png)

これで取得したサブドメイン宛にメールが送られると、登録したMXレコードが参照され、Amazon SESへ送られます。

# SESの設定
次はSESを設定します。
AWS Management ConsoleからSESを開きます。

![image](https://qiita-image-store.s3.amazonaws.com/0/64811/6618c5ba-b38c-5f54-d1c7-1b45d6939058.png)
東京リージョンを普段使いしている人は大体こうなるので、別リージョンを選択しましょう。
今回はエンドポイントを設定したUS Eastを選択します。

`Email Receiving`から`Rule Set`を開きます。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/2a9ef7e6-81b9-699b-76f3-20d7b0794037.png)

`Create a Receipt Rule`を押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/1fa35717-d75a-15df-02a0-2ac3cc776606.png)

先ほど取得したサブドメインを入力し、`Add Recipient`を押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/677e5f05-3811-ad7f-2186-63d059daa1de.png)

一覧に追加されるので、`Verify domain`をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/54ca2044-df9a-4e2c-bf77-340e649c2d66.png)

ドメインの所有者であることを証明するため、TXTレコードを登録するように指示されます。
ここでは一旦`Download Record Set as CSV`を押して保存しておき、`Close`を押して次へ進みます。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/ba75af7f-18f8-9031-ca77-e30435e8c653.png)

メールを受信した時のActionを設定します。
S3を選び、
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/3202acea-055d-72d5-dacc-6f6598b52d49.png)

保存するS3バケットを設定します。
他にもSNSで通知させたり、Lambdaを動かしたりできるのですが、今回は省略します。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/2f32e868-c6f0-93e1-5ad2-2ab8afb4a33a.png)

ルール名を設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/8d488164-bda0-bf48-87a3-b90fd4ae38fe.png)

最後に設定内容を確認し、`Create Rule`をポチれば完了です。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/6c876df3-4566-f94f-64b8-019a45a21fbb.png)

設定出来ました。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/d6055c83-4729-62d6-c6cb-b7ea818c26cc.png)


# Verification
Dynamic DOのページに戻り、先ほどSESから指定されたTXTレコードを登録します。
`各種申請`から`TXTレコード変更`を開きます。

先ほどSESから指定されたTXTレコードを入力し登録します。
ドメインのところには`_amazonses`(SESが指定したNameの部分)を入力します。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/c23fb275-669a-4e28-1bd0-8ccd0fee7966.png)

Amazon SESの画面に戻り、`Identity Management`から`Domains`を開くと、ドメインのVerificationの状態が確認出来ます。
無事`verified`になりました。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/51e95149-26d2-9c99-55f1-6a4e6a6a5fe5.png)

# テスト
Gmailなどから適当にメールを送信してみましょう。
宛先メールアドレスの`@`マークの前は何でもOKです。
今回は`admin@<サブドメイン>.ddo.jp`へ送ってみます。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/1631d4a2-21e7-4208-e78d-83e1ab8ca433.png)

無事届きました。
![image](https://qiita-image-store.s3.amazonaws.com/0/64811/790c15e4-fc50-c872-700d-3f3a4063cb8e.png)

ファイルは拡張子がありませんが、`.eml`形式のファイルになっているので拡張子を付けてあげればOutlookなどで開けます。(もちろんテキストエディタで開いても構いません)
※正確には、`RFC 2045`準拠のraw Eメールです。

# まとめ
無料DDNSとAmazon SESをを組み合わせることで、独自(サブ)ドメインでのメール受信環境を整えることができました。
SESは1,000件/月の受信まで無料枠があるので、お金をかけずに運用することができます。
[料金 - Amazon Simple Email Service（SES） | AWS](https://aws.amazon.com/jp/ses/pricing/)

ACM(AWS Certificate Manager)のVerificationをする際に`admin@ドメイン名`などでのメール受信環境が必要なため、そういった使い道があるかと思います。
DDNSでWebサイトを運用する際にも利用できそうですね。

# 参考サイト
[[新機能]Amazon SES でメール受信が出来るようになりました！ ｜ Developers.IO](http://dev.classmethod.jp/cloud/receiving-email-with-amazon-ses/)

[Cloud Automator | SESのEmail ReceivingとSNSによるEメールトリガーでジョブを実行する](https://cloudautomator.com/blog/2015/09/30/email-trigger-using-ses-and-sns/)