タイトル意味分からないですよね。これ、説明が難しくて
メールサーバを構築せずに無料で独自ドメインのメールアドレスをGmailで送受信し、さらに、Google Compute Engine(GCE)からも同一ドメインでメール送信することを実現しようとした結果、メール配信サービスの「Mailgun」を使用することにした
を上手く要約できなかったので、こんなタイトルになりました。
イントロダクション
メールボックス(メールサーバ)も付属するレンタルサーバの利用者は関係ないけど、私のようにGCEといった仮想サーバでサイト運営している人がメールを使いたい場合、「メールサーバを別途構築する」か「その他のサービスを利用する」必要がある。
腕に自信のある人はメールサーバを構築するのもアリだと思うけど、残念ながら私にはそのスキルがないし、もとより構築後の運用が面倒そうなので「サービス利用」の方向で検討。
また、どうせならGCEとも連携して、GCEのサーバからも同じドメインでメール送信したい。となると選択肢としては、Mailgun、SendGrid、Mailjetくらいに絞られる。今回はその中でも一番目的にあっていたMailgunを使うことにした、というわけ。
Mailgunとは
Mailgunはメールの送信や受信、転送、追跡(トラッキング・分析)などを行ってくれる高機能なメール配信サービス。
開発者向けに多数のAPIを提供しているほか、メールの配信状況や設定内容をブラウザ上から簡単に確認・管理できるのが特徴。
実現することの整理
今回は以下を実現します。順を追って説明します。
- Mailgunのアカウントを作成する(Google特典付き)
- 「@yusukesakai.com」宛のメールをMailgunで受信し、Gmailに転送する
- Gmailから「mail @yusukesakai.com」としてメール送信可能にする
- GCEサーバから「@yusukesakai.com」としてメール送信可能にする
構成図に示すとこんな感じ。ここまで説明すればやりたいことが伝わるだろうか。
Mailgunのアカウントを作成する(Google特典付き)
まず、Mailgunを使用するためにアカウントを作成する。既にアカウントを持っている人は作成不要だけど、以下のリンクからアカウントを作成するとGoogle特典でメール配信の無料枠上限が毎月1万通のところ3万通になるので、この機会に作成し直すのも良いと思う。【2020/6/1追記】後ほど紹介する、メール受信(転送)機能を使用する場合は、このGoogle特典がないと無料で使用できません。必ず以下のURLからアカウントを作成してください(アフィではないのでご安心ください)。

このとき、アカウント作成画面の「Select Another Plan」で「Google -Sign Up Free」が選択されていることを確認する。

また、同画面で支払情報(クレジットカード情報)も入力する。後からでも可だけど、支払情報がないと独自ドメインを設定できないため、忘れずに入力する。なお、入力してもメール配信数が無料枠を超えない限りは課金されない。
また、本題のメール転送・配信設定に入る前に、Settingsから「Time zone」や「Time format」を日本仕様に変えておくと良い。
「@yusukesakai.com」宛のメールをMailgunで受信し、Gmailに転送する
アカウント作成直後は、Mailgunが用意したメールアドレス(sandbox~.mailgun.org)しか使えない。そこで、まずは独自ドメイン宛のメールをMailgunで受信できるように設定する。
今回はこのサイトのドメイン「yusukesakai.com」を例に、「~@yusukesakai.com」宛のメール設定を説明する。
DNS設定
ダッシュボード右側の「Add a custom domain」をクリック。
「Domain name」に「yusukesakai.com」を入力。「Create DKIM Authority」と「2048」にチェックし、「Add Domain」をクリック。
遷移後の画面で、DNSサーバに設定するレコード値が複数表示される。そのため、利用しているDNSサーバの設定画面を開き、Mailgunに記載のとおり設定していく。
画像はCloudflareの設定例。ポイントは、CNAMEレコードをProxy経由にしない(DNS onlyにする)こと。
DNSサーバの設定が完了したらMailgunの画面に戻り、「Verify DNS Settings」をクリック。
正しくDNS設定が反映されていれば「Current Value」に値が入り、自動で上の画面に遷移する。
メール受信(転送)設定
いったん、メールを送信するためのAPIやSMTPの確認は飛ばして、メールの受信設定をしていく。
左側の「Receiving」をクリック後、右側の「Create Route」をクリック。
「Expression type」で「Catch All」を選択後、「Forward」にチェックを入れて転送先のGmailアドレスを入力する。
ここで、より細かい設定(受信メール毎に転送先を変える、等)をしたい場合は、「Catch All」以外を選択する。その他にも、複数の条件に優先度を設定することもできるが、今回は必要ないためこのまま進める。
設定内容に問題なければ、画面下の「Create Route」をクリック。
元の画面に戻り、設定が反映されたことを確認する。
メール受信(転送)確認
実際に「~@yusukesakai.com」宛にメールを送信し、Gmailに転送されるか確認する。アットマーク前はどんな文字列でもOK。
試しにdocomoから添付ファイルも付けて送信し、問題なく受信できた。署名や暗号化もできているため、DKIMも問題なさそう。めでたし。
Gmailから「mail @yusukesakai.com」としてメール送信可能にする
今度は、Gmailから独自ドメインのメールを送信できるようにする。今回は「mail @yusukesakai.com」から送信することを例に説明する。
Mailgunでのアカウント作成
Mailgunの画面を表示し、左側から「Sending」>「Domain settings」をクリック。上部の「Domain」で対象ドメインが選択されていることを確認後、「SMTP credentials」タブに遷移し、「New SMTP User」をクリック。
「mail」を入力し、「Create SMTP Credential」をクリック。
元の画面で設定が反映されたことを確認。また、このとき「Reset Password」をクリックし、表示されたパスワードを控えておく。
Gmailでのメールアドレス追加
次に、Gmailのメール受信画面を開き、右側にある歯車をクリック後、「設定」をクリック。
「アカウントとインポート」タブに遷移し、「他のメールアドレスを追加」をクリック。
名前とメールアドレスを入力し「次のステップ」をクリック。(エイリアスはお好みで)
以下の情報を入力する。
- SMTPサーバー:smtp.mailgun.org
- ポート:587
- ユーザー名:mail @yusukesakai.com
- パスワード:先程Mailgunで控えたパスワード
内容に問題なければ「アカウントを追加」をクリック。すると、Gmailチームから「mail @yusukesakai.com」宛に確認メールが送信される。
先程の手順でGmailから受信できるようにしたはずなので、不備がなければ受信ボックスにメールが届いているはず。無事届いていたら、メール内のリンクをクリックするか、確認コードを入力する。
これで、Gmailから新規メールを作成する際、「mail @yusukesakai.com」としてメールを送信できるようになったはず。めでたしめでたし。
GCEサーバから「@yusukesakai.com」としてメール送信可能にする
最後に、GCEのサーバからMailgunを中継して、独自ドメインのメールを送信できるようにする。
前提知識
GCEを含む多くの仮想サーバでは、不正使用を防止するため、メール用の25番ポートがブロックされている。そのため、デフォルトではメールを送信できない。
そこで、代替手段としてMailgunなどのメール配信サービスを中継して送信することが推奨されている。ここで紹介する内容は、以下のサイトで解説されている手順と基本的に同じ。

というわけで、基本的な説明は上のリンク先に任せて、ここでは必要な操作やコマンドだけ抜粋して掲載する。
ファイアウォールルールの設定
25番ポートが使用できないため、代わりに2525番ポートをファイアウォールで開放し、使用できるようにする。詳細はこのページ参照。
Postfixの設定
GCEサーバにSSHで接続し、Postfixなど必要なパッケージをインストール。
$ sudo -s # umask 077 # apt update && apt install postfix libsasl2-modules -y # vi /etc/postfix/main.cf
Postfixの構成オプションを変更。
## 以下の設定がある場合コメントアウト # default_transport = error # relay_transport = error ## 以下の設定を反映 relayhost = [smtp.mailgun.org]:2525 smtp_tls_security_level = encrypt smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous
SASLパスワードマップの生成。「YOUR_SMTP_LOGIN」と「YOUR_SMTP_PASSWORD」はMailgunのSMTP設定にあわせて変更すること。
# cat > /etc/postfix/sasl_passwd << EOF > [smtp.mailgun.org]:2525 YOUR_SMTP_LOGIN:YOUR_SMTP_PASSWORD > EOF
.dbファイルの生成。
# postmap /etc/postfix/sasl_passwd # rm /etc/postfix/sasl_passwd # chmod 600 /etc/postfix/sasl_passwd.db
Postfixサービスの再起動。
# /etc/init.d/postfix restart
メール送信確認。「[email protected]」は送信先のメールアドレスに変更すること。
# apt install mailutils -y # echo 'Test passed.' | mail -s 'Test-Email' [email protected]
以上。送信先で受信確認できたら終了。ちなみに、送信元アドレスのアットマーク前は実行ユーザ(上記の場合[email protected]~)になっていると思う。
まとめ
手順まとめるのが滅茶苦茶大変だった…。
それにしても、こんな高機能なメール配信サービスが無料で使えるとは。だいぶ前からサービス提供しているようだし、他にも同様のサービスが多々ある中で今更かもだけど、便利な世の中になったことをつくづく実感した。