AWS にサーバーレス(メールサーバー不要)で電子メールを送受信できるサービス SES(Simple Email Service)があります。
今回は、「お名前.com」で取得した独自ドメインを Route53 に登録して SES(Simple Email Service)で無料でメールを受信する手順を解説します。
※今回はメールの「受信」だけ行なう手順です。メール送信の設定手順については別途解説する予定です。
ちなみに、AWS WorkMail というサービスを利用すると SES と同じようにサーバーレスで電子メールを送受信できます。
こちらは SES を利用してメールを送信する手順の記事です。(古い記事)
【AWS】Route53 に「お名前.com」取得の独自ドメインを登録して Amazon SES(Simple Email Service)で SMTP プロトコルでメールを送信する手順
以下の記事が SES を利用してメールを送信する手順の最新版です。(新しい記事)
【AWS】Route53 に「お名前.com」取得の独自ドメインを登録して Amazon SES(Simple Email Service)で SMTP プロトコルでメールを送信する手順
SES(Simple Email Service)とは?
Amazon SES(Simple Email Service)はサーバーレスの電子メール送受信サービスです。
通常はサーバーを構築後に、Postfix をインストールして SMTP サーバーを構築したり、Dovecot をインストールして IMAP もしくは POP3 サーバーを構築します。
しかし、Amazon SES を利用すればメールサーバーを構築しなくても、設定だけで電子メールを送受信できるようになります。
1ヶ月あたりメール 1,000 通送受信されるたびに 0.10 USD が課金される
1ヶ月あたりメール 1,000 通送受信されるたびに 0.10 USD が課金されます。
また、EC2 でホストされているアプリケーションからメールを送信する場合は、1 か月あたりに送信された最初の 62,000 通のメールについては 0 USD です。つまり無料です。
「EC2 でホストされているアプリケーションからメールを送信する」とは、例えば PHP でメール送信プログラムを作成するとか、mail や mailx コマンドでメールを送信するなどの方法があります。
作業手順
全体的に以下の作業手順になります。
- Route 53 に独自ドメインを登録する
- Amazon SES(Simple Email Service)の設定をする
- ルールセット(Rule Sets)を作成する
- メールを送信する
- メールの受信確認をする(S3 にアクセスしてメールの受信確認)
「お名前.com」で取得した独自ドメインを Route 53 に登録する
「お名前.com」で取得した独自ドメインを「Route 53」に登録します。
手順は、以前お名前.com で取得した独自ドメインを Amazon Route 53に登録する手順を解説した記事を作成したので、こちらを参考にしてください。
【AWS】お名前.com で取得した独自ドメインを Amazon Route 53 で名前解決して EC2 インスタンスの Web サーバーにアクセスさせる手順]
独自ドメインを「Amazon Route 53」に登録すると、下図のようになります。
Amazon SES(Simple Email Service)の設定
ここから Amazon SES の設定をしていきます。
AWS 管理コンソール画面より「サービス」–「カスタマーエンゲージメント」–「Simple Email Service」をクリックします。
東京リージョンではまだ「Simple Email Service」が利用できないため下図の「Supported Regions」の一覧よりリージョンを選択します。
今回は一番上にある「EU(アイルランド)」を選択しました。
「SES Home」–「Domains」をクリックします。
「Verify a New Domain」ボタンをクリックします。
「Verify a New Domain」画面でドメインを入力して「Verify This Domain」ボタンをクリックします。
※今回はメール受信だけの設定をするため「Generate DKIM Settings」にチェックは入れません。
「Verify a New Domain」画面で「Use Route 53」ボタンをクリックします。
※「Use Route 53」ボタンをクリックすると自動的に「MXレコード」が「Route 53」に登録されます。
「Email Receiving Record」にチェックを入れます。
※注意 ここに「Email Receiving Record」にチェックを入れると既存の「MX レコード」が上書きされてしまうので注意です。
「Create Record Sets」ボタンをクリックします。
下図のように「ドメイン」が作成されます。
※作成直後は下図のように「Status」が「pending verification」になります。
それぞれ環境が異なるので正確な時間は分かりませんが、今回の場合は約30分後に再度確認すると下図のように「Verified」に変わっていました。
AWSの管理コンソールより「Route 53」の「Hosted zones」を確認すると下図のように「MX レコード」と「TXT レコード」が自動的に追加されていることが分かります。
ルールセット(Rule Sets)の作成
次にルールセット(Rule Sets)を作成します。
ルールセットとは、設定したドメインで受信したメールを Amazon SES でどう処理するかを定義したルールのセットです。
Rule Sets でどんなルールを設定できるのか?
以下の処理などが可能になります。
- Amazon S3 バケットにメールメッセージを保存する
- AWS Lambda でプログラムを実行する
- Amazon SNS に通知する
- 受信したくないメッセージをドロップまたはバウンスする
ルールセット(Rule Sets)の作成手順
AWS 管理コンソールの「SES HOME」より「Rule Sets」に 移動します。
「Receive Email with Amazon SES」画面で「Create a Receipt Rule」ボタンをクリックします。
「Step 1: Recipients」で下図のように空白欄にドメインを入力し「Add Recipient」ボタンをクリックします。
※今回は「test@xxxxx.com」や「root@xxxxx.com」のように「@」前のアカウントを指定せずに、まるっとドメイン全体を登録しました。
そのため「test@xxxxx.com」でも「root@xxxxx.com」でも指定のドメインからのメールはすべて対象になります。
下図のように「Recipient」に追加されたことを確認し、「Next Step」ボタンをクリックします。
「Step 2: Actions」画面で「<Select an action type>」をクリックしてアクションを選択します。
選択できるアクションは以下のように7種類の中から選択できます。(AWSのことですから今後も増えていくと思います)
・Add Header
・Bounce
・Lambda
・S3
・SNS
・Stop Rule Set
・WorkMail
今回は「S3」を選択します。
「S3 bucket」の「<None>」をクリックして、「S3 バケット名」を選択するか新しく「S3 バケット」を作成します。
今回は新規で「S3 バケット」を作成します。
「Create S3 bucket」を選択します。
「Create New Bucket」画面で S3 バケット名を設定して「Create Bucket」ボタンをクリックします。
ピリオド(.)とハイフン(-)の使用が可能です。
今回は「S3 バケット」だけ設定して「Next Step」ボタンをクリックします。
「Step 3: Rule details」で「Rule name」を設定して「Next Step」ボタンをクリックします。
※今回は新しい「ルールセット」を作成せずにデフォルトのルールセット(default-rule-set)を利用しました。
「Step 4: Review」画面で設定内容を確認します。
問題がなければ「Create Rule」ボタンをクリックします。
下図のようにルールセットが出来ていることを確認します。
メールの受信確認
設定が完了したら、最後にメールの受信確認をします。
メールの送信
設定したドメインに対してテストメールを送付します。
宛先のメールアドレスは「test@xxxxx.com」で送付します。
S3 にアクセスしてメールの受信確認
AWS 管理コンソールより「ストレージ」–「S3」をクリックします。
ルールセット作成時に、同時に作成した S3 のバケットに移動します。
S3 バケットにメールが入っているので、対象のメールにチェックを入れて「ダウンロード」ボタンをクリックします。
メールの内容は下図のようになっています。
「Subject:~」がメールのタイトルです。
一番下にある文字列がメールの本文です。
メールのタイトルは「Base64」エンコードされているので、「Base64」デコードします。
下図のように「=?UTF-8?」以降の赤枠で囲まれている部分を切り取ります。
Linux に「nkf」コマンドがあるので、nkf コマンドで Base64 でデコードします。
[test@SAKURA_VPS ~]$ echo 44OG44K544OI44Oh44O844Or?= | nkf -WmB ← nkf コマンドで Base64 でデコードします。 |
下記のサイトでもエンコード/デコードが可能です。
エンコードマニアックス
先ほどの「=?UTF-8?」以降の文字列を入力し、「エンコード/デコード」ボタンをクリックします。
下図のように Base64 デコードされた文字列が表示されました。
コメント