背景
WebアプリをGCPでホストしていますが、メールサーバーは先方指定のものを使わなければならなくなりました。その際に行った手順を解説します。
ステップ①:権威DNSを設定する
ドメイン取得会社(今回はお名前ドットコム)の「他のネームサーバーを使用」から権威DNSを指定します。
ここでGCP指定のDNS, ns-cloud-d1.googledomains.com
~ns-cloud-d5.googledomains.com
を指定します。
複数のDNSを登録するのは、一つが対応できなくなったときに他のDNSがカバーするためです。
ステップ②: DNSレコードの設定
GCPの「DNS Cloud」にて権威DNSのレコード設定を行います。
今回指定するレコードは、MX
, TXT(DKIM)
, SPF
です。
DNS名 | 種類 | 情報 |
---|---|---|
example.com | MX | mail.server.com |
default._domainkey.example.com | TXT | "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki.... |
example.com | SPF | "v=spf1 +mx +a +ipx.x.x.x ~all" |
-
MX
は、メールをメールサーバーに送信するためのものです。ここで、Aレコードでも同じホスト名にIPアドレスを割り当てていますが、衝突は起こりません。メールの場合はsmtp, webの場合はhttp, httpsという異なるプロトコルを使っているからという理解です。 -
SPF
は、ドメイン(example.com)の送信するメッセージが、リストされたサーバーから送信されたものであることを検証します。
「リストされたサーバー」とは、+mx
(MXレコードで指定したサーバー),+a
(Aレコードで指定されたIPアドレス)などを指します。
逆にリストされてないサーバーから送られていると不正なものである可能性が高いと言うことです。 -
DKIM
は、RSA暗号を用いて送信者の認証とメッセージが改ざんされていないかを検証します。Cloud DNSで情報を入れる場合は少し注意が必要で下記のように、文字列を分割する必要があります。
"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCBQ8AMIIBCgKCAQEAraC3pqvqTkAfXhUn7Kn3JUNMwDkZ65ftwXH58anno/bElnTDAd/idk8kWpslrQIMsvVKAe+mvmBEnpXzJL+0LgTNVTQctUujyilWvcONRd/z37I34y6WUIbFn4ytkzkdoVmeTt32f5LxegfYP4P/w7QGN1mOcnE2Qd5SKIZv3Ia1p9d6uCaVGI8brE/7zM5c/" "zMthVPE2WZKA28+QomQDH7ludLGhXGxpc7kZZCoB5lQiP0o07Ful33fcED73BS9Bt1SNhnrs5v7oq1pIab0LEtHsFHAZmGJDjybPA7OWWaV3L814r/JfU2NK1eNu9xYJwA8YW7WosL45CSkyp4QeQIDAQAB"
ステップ③:メールを送信してみる
Flask-Mailでメールを送信してみます。
def send_mail():
msg = Message(
subject="Hello from Flask-Mail",
recipients=["hello@hello.com"],
body="This is a test email sent from a Flask app using Flask-Mail."
)
mail.send(msg)
return "Successful"
終わり