Posted at

フリーランスが独自ドメインのメールアドレスを扱えるようになるまで


はじめに

 個人事業主になってから半年くらいになりますが、未だにメールアドレスをGmailにしていて

そろそろ独自ドメインのメールアドレスで事業主っぽい環境を整えようかと思い構築しました。

 ※当記事ではAWSを使いエンジニアリングな環境で構築することを目的としています。

手っ取り早く設定したい場合はSendGridなど各種サービスを使用することを推奨します。


前提条件

 今回使用するリソースは以下になります。



  • お名前.com


    • ※既にドメインを取得していますので流用しています

    • ※新規でドメインから登録する場合はAWSのRoute53を推奨します




  • AWS


    • アカウントがない場合は新規に作成しておきます




  • Gmail


    • 既存で使用可能なフリーのメールアドレスを用意しておきます




  • Node.jsライブラリ




ドメイン取得

当記事ではお名前.comで取得したドメインで進めていきます。

ドメインの取得方法は割愛します。

https://www.onamae.com/

なお、AWSのRoute53からも取得することができます。

当記事ではRoute53にホスティングしますので、新規ユーザーの方は親和性の高いAWSから取得することも選択肢の一つとしてよいでしょう。

取得方法は以下を参考にしましょう。

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/registrar.html


Route53の設定

お名前.comで取得したドメインをRoute53でホスティングします。

スクリーンショット 2019-08-09 10.40.06.png

ホストゾーンの作成から自身のドメインを入力し、登録が完了すればOKです。


ネームサーバーの設定

お名前.comを使用する場合の例です。

お名前.com Naviにログインしネームサーバー情報から変更するで以下のネームサーバーの情報を入力し保存します。

スクリーンショット 2019-08-09 10.44.55.png

保存後に設定した情報が反映されていることを確認します。

スクリーンショット 2019-08-02 0.12.53.png


SESの設定

Amazon Simple Email Service

メールの送受信に使用するサービスです。

2019/08時点では東京リージョンに対応していないのでバージニア北部あたりで設定を進めます。

まずはドメインを登録するためにVerify a New Domainから自身のドメインを登録します。

Generate DKIM SettingsはONにしておきます。

スクリーンショット 2019-08-02 0.20.18.png

数分待ち、検証が完了するとVerification StatusVerifiedになっていることを確認します。


送受信用メールアドレスの設定

SESはデフォルトでは自身が登録したメールアドレスでのみ受信が可能です。

申請により制限が解除されれば問題ありませんが、制限解除まで時間がかかるので後述の設定のために

Verify a New Email Addressよりフリーのメールアドレス(Gmailなど)を登録しておきます。

スクリーンショット 2019-08-02 0.20.55.png


SMTP認証ユーザー設定

SMTP SettingsよりCreate My SMTP Credentialsを押下します。

IAMユーザーが作成されますので、アクセスキーとシークレットアクセスキーをメモしておきます。

この情報は後ほどGmailの送信設定からSMTPのユーザー名/パスワードとして登録します。

スクリーンショット 2019-08-09 11.16.28.png


受信ルール設定

独自ドメインメールアドレスでメールを受信するために、RuleSetを作成します。

メニューのRule Setsより受信ルールを設定します。

Recipientには自身で使用したいメールアドレスを記載します。

スクリーンショット 2019-08-09 11.55.20.png

受信先は一旦S3にしておきます。

 ※後述のSMTP認証を行なうための受信先になりますので仮です

スクリーンショット 2019-08-09 11.56.59.png

あとは画面の手順に従い、RuleSetの登録を完了します。

この時点では先ほどのVerify a New Email Addressで設定したメールアドレスからのみ受信できるようになっています。


SESの制限解除申請

SESのデフォルトでは自身がVerify a New Email Addressより登録したメールアドレスのみ受信ができます。

外部のあらゆるメールアドレスと送受信できるようにするために、AWSサポートから制限の解除を申請します。

以下を参考にするとよいでしょう。

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html

私は1日50,000メッセージ、最大送信レートが毎秒14メッセージまで制限が緩和されました。


Gmail設定

さて、先ほどSMTPの設定をしましたが実際にSMTPを通してメールを送信するところまでやってみます。

当記事ではGmailを利用した例で設定します。

Gmailの設定からアカウントとインポートを選択し、他のメールアドレスを追加を押下します。

以下の画面より、先ほどの受信ルール設定で登録したメールアドレスを入力します。

スクリーンショット 2019-08-09 11.41.57.png

次のステップで、SMTPの情報を入力します。

SMTPサーバーはSESの画面から確認できます。

ユーザー名は先ほど作成したIAMユーザーのアクセスキー、パスワードはシークレットアクセスキーを入力します。

スクリーンショット 2019-08-09 11.47.43.png

スクリーンショット 2019-08-09 11.16.28.png

そうするとS3に確認用のメールが届いていますので、拡張子をemlにして中を確認し、確認用URLへリンクもしくは確認用コードを入力して設定を完了します。


Lambda作成

SESではメールをPOP3やIMAPなどを通して受信する手段はありません。

S3に配置するかLambdaで転送するなどの方法があります。

当記事では以下のライブラリを使用する例を挙げます。

https://github.com/arithmetric/aws-lambda-ses-forwarder

あらかじめLambdaを実行するロールに以下のポリシーを付与しておきます。

S3バケットは先ほどの手順で受信先に設置したバケットで問題はありません。

{

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
}
]
}

index.jsに各種アドレスの設定を記述します。

以下の例では

{独自ドメインのメールアドレス}に受信したメールが、Fromをforwarder@{独自ドメイン}として{Gmail}に転送される

ということになります。

なお、Reply-Toが適切に設定された状態で転送されるので、返信先がforwarder@{独自ドメイン}になることはありません。


index.js


var LambdaForwarder = require("aws-lambda-ses-forwarder");

exports.handler = function(event, context, callback) {
// See aws-lambda-ses-forwarder/index.js for all options.
var overrides = {
config: {
fromEmail: "forwarder@{独自ドメイン}",
emailBucket: "{バケット名}",
emailKeyPrefix: "",
forwardMapping: {
"{独自ドメインのメールアドレス}": [
"{Gmail}"
]
}
}
};
LambdaForwarder.handler(event, context, callback, overrides);
};


設定が完了したらZIPにしてLambda関数を作成します。

 ※あらかじめnpm installnode_modulesパッケージをインストールしておくことを忘れずに

実行ロールは先ほどのポリシーが適用されていることを確認します。

最後に、SESのRule Setsを更新します。

受信アクションにLambdaを追加し、最終的に以下のようなルールになっていればOKです。

スクリーンショット 2019-08-09 12.33.43.png


メール送信

最後にテストしてみましょう。

外部のメール(yahoo)から独自ドメイン宛てに受信したメールに対して、外部のメール(yahoo)宛に返信ができることを確認できると思います。

スクリーンショット 2019-08-09 12.23.48.png