メール+サーバレス+無料+独自ドメイン+Gmail+GCE=Mailgun

タイトル意味分からないですよね。これ、説明が難しくて

メールサーバを構築せずに無料で独自ドメインのメールアドレスをGmailで送受信し、さらに、Google Compute Engine(GCE)からも同一ドメインでメール送信することを実現しようとした結果、メール配信サービスの「Mailgun」を使用することにした

を上手く要約できなかったので、こんなタイトルになりました。

イントロダクション

メールボックス(メールサーバ)も付属するレンタルサーバの利用者は関係ないけど、私のようにGCEといった仮想サーバでサイト運営している人がメールを使いたい場合、「メールサーバを別途構築する」か「その他のサービスを利用する」必要がある。

腕に自信のある人はメールサーバを構築するのもアリだと思うけど、残念ながら私にはそのスキルがないし、もとより構築後の運用が面倒そうなので「サービス利用」の方向で検討。

また、どうせならGCEとも連携して、GCEのサーバからも同じドメインでメール送信したい。となると選択肢としては、Mailgun、SendGridMailjetくらいに絞られる。今回はその中でも一番目的にあっていたMailgunを使うことにした、というわけ。

Mailgunとは

Mailgunはメールの送信や受信、転送、追跡(トラッキング・分析)などを行ってくれる高機能なメール配信サービス。

開発者向けに多数のAPIを提供しているほか、メールの配信状況や設定内容をブラウザ上から簡単に確認・管理できるのが特徴。

実現することの整理

今回は以下を実現します。順を追って説明します。

  1. Mailgunのアカウントを作成する(Google特典付き)
  2. 「@yusukesakai.com」宛のメールをMailgunで受信し、Gmailに転送する
  3. Gmailから「mail @yusukesakai.com」としてメール送信可能にする
  4. GCEサーバから「@yusukesakai.com」としてメール送信可能にする
スパム対策のため、メールアドレスを表記する際にアットマーク前に半角スペースを挿入しています。実際には半角スペースは不要です。

構成図に示すとこんな感じ。ここまで説明すればやりたいことが伝わるだろうか。

Mailgunのアカウントを作成する(Google特典付き)

まず、Mailgunを使用するためにアカウントを作成する。既にアカウントを持っている人は作成不要だけど、以下のリンクからアカウントを作成するとGoogle特典でメール配信の無料枠上限が毎月1万通のところ3万通になるので、この機会に作成し直すのも良いと思う【2020/6/1追記】後ほど紹介する、メール受信(転送)機能を使用する場合は、このGoogle特典がないと無料で使用できません。必ず以下のURLからアカウントを作成してください(アフィではないのでご安心ください)。

Transactional Email API Service For Developers | Mailgun
Powerful Transactional Email APIs that enable you to send, receive, and track emails, built with developers in mind. Learn more today!

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

2020/6/1現在の画面は以下のようになっている模様。特典自体は大きく変わっていないようですが、一部の表現とプラン名が異なるようです。

また、同画面で支払情報(クレジットカード情報)も入力する。後からでも可だけど、支払情報がないと独自ドメインを設定できないため、忘れずに入力する。なお、入力してもメール配信数が無料枠を超えない限りは課金されない。

また、本題のメール転送・配信設定に入る前に、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などのメール配信サービスを中継して送信することが推奨されている。ここで紹介する内容は、以下のサイトで解説されている手順と基本的に同じ。

Mailgun でのメールの送信  |  Compute Engine ドキュメント  |  Google Cloud

というわけで、基本的な説明は上のリンク先に任せて、ここでは必要な操作やコマンドだけ抜粋して掲載する。

ファイアウォールルールの設定

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]

以上。送信先で受信確認できたら終了。ちなみに、送信元アドレスのアットマーク前は実行ユーザ(上記の場合root@~)になっていると思う。

まとめ

手順まとめるのが滅茶苦茶大変だった…。

それにしても、こんな高機能なメール配信サービスが無料で使えるとは。だいぶ前からサービス提供しているようだし、他にも同様のサービスが多々ある中で今更かもだけど、便利な世の中になったことをつくづく実感した。

タイトルとURLをコピーしました