SendGrid 新人成長記 第六回 Domain Authentication: メールの到達率を高めるために
- 2019年12月17日
- by 吉田 健人
- Category: 機能・使い方
新人がTwilio SendGridの機能を試してみる連載の第六回目です!これまで何種類かの方法でメール送信を試してきましたが、送信したメールをGmailで開くと、送信元のアドレスの横に”sendgrid.net 経由”と表示されていることに気が付きました。
Gmailをはじめとするメールクライアントは、届いたメールが不当なものではないことを確認するため、指定されたドメインとやりとりしてその正当性を確かめます(送信ドメイン認証)。デフォルトではsendgrid.netからメールの認証情報を得るため、上のような経由の表示が出ます。
メールを受け取る側からすると、sendgrid.netという知らないドメインが表示されていることに不信感を持つ方もいるかも知れません。また、差出人のドメインと認証のためのドメインが異なる場合、メールクライアントによっては迷惑メールと判断されてしまうこともあります。そこで、”Domain Authentication”を設定してドメインの不整合を解消しましょう。これにより、受信箱へのメール到達率の上昇に繋げることができます。以下ではダッシュボード画面から設定する方法とAPIを使う方法の二種類を紹介します。
ダッシュボードから設定する方法
1. ドメインの指定
ダッシュボードのSettingsからSender Authenticationを選び、初回設定時であればDomain AuthenticationのGet Startedをクリックします。
次の画面では2つの質問が表示されます。一つ目の質問ではAmazon Route 53などよく知られているDNSサービスを選ぶことができ、その後の表示が各サービスに合わせたものになりますが、回答は必須ではありません。二つ目の質問はLink Brandingに関するオプションですが、Noのままにしておきます。
Nextボタンを押して出てくる画面で、Fromに指定する予定のドメイン (Domain You Send From) を入力します。本記事ではexample.comとして話を進めますが、今回自分で試すにあたっては無料でドメインを取得できるサービスFreenomを用いました。
2. DNSレコードの追加
次に以下のような画面になります。この表示に従って、DNSのサービス (Amazon Route53とかお名前.com) の管理画面でドメインのDNSレコードにCNAMEレコードを追加しましょう。これは、”HOST”欄に書かれた自分のドメインに対して”VALUE”欄のTwilio SendGridのドメインを別名として持たせる、という作業です。サービスによっては”HOST”や”VALUE”とは異なる表記がされている場合があるので、注意しましょう。Freenomの場合、”HOST”は”Name”、”VALUE”は”Target”と表現されていました。
3. 設定のチェック (Verify)
DNSサービス側で設定が完了したら、Domain Authenticationの設定画面下の”I’ve added these records.”にチェックしてVerifyボタンを押します。設定したCNAMEレコードが反映されるのに少し時間がかかる場合もあるので、Verifyする前にターミナル上でdigコマンドを用いて確認するのが安全です。
$ dig em3385.example.com cname ;; ANSWER SECTION: em3385.example.com. 300 IN CNAME u0000.wl00.sendgrid.net.
きちんとCNAMEレコードが反映されていれば、Verifyボタンを押すと”It worked!”という画面が表示されます。
これでダッシュボードによるDomain Authenticationの設定は完了です。
APIで設定する方法
ダッシュボードによる設定手順の1から3のうち、DNSサービス側での操作が必要な「2. DNSレコードの追加」以外の二つはSendGridのAPIを使うこともできます。「1. ドメインの指定」は、cURLでは以下のようになります(APIリファレンスのリンクはこちら)。
$ curl --request POST \ $ --url https://api.sendgrid.com/v3/whitelabel/domains \ $ --header 'authorization: Bearer <<YOUR_API_KEY>>' \ $ --header 'content-type: application/json' \ $ --data '{"domain":"example.com"}'
<<YOUR_API_KEY>>にはAPIキーを入れてください。うまくいけば下のようなJSONが返ってきます。”dns”の中の3つの項目がDNSに追加するべきCNAMEレコードになります。
{ "id": 1234567, "user_id": 13572468, "subdomain": "em3385", "domain": "example.com", "username": "john@example.com", "ips": [], "custom_spf": false, "default": false, "legacy": false, "automatic_security": true, "valid": false, "dns": { "mail_cname": { "valid": false, "type": "cname", "host": "em3385.example.com", "data": "u00000000.wl000.sendgrid.net" }, "dkim1": { "valid": false, "type": "cname", "host": "s1._domainkey.example.com", "data": "s1.domainkey.u00000000.wl000.sendgrid.net" }, "dkim2": { "valid": false, "type": "cname", "host": "s2._domainkey.example.com", "data": "s2.domainkey.u00000000.wl000.sendgrid.net" } } }
DNSにCNAMEレコードを追加したら、下のcURLコマンドでverifyします(APIリファレンスはこちら)。
$ curl --request POST \ $ --url https://api.sendgrid.com/v3/whitelabel/domains/<<id>>/validate \ $ --header 'authorization: Bearer <<YOUR_API_KEY>>' \ $ --data null
URLの<<id>>にはドメインを指定した際に得られたJSONの”id”(上の例では1234567)を入れてください。うまくいけば、以下のような「”valid”: true」を含むJSONが返ってきます。
{ "id": 1234567, "valid": true, "validation_results": { "mail_cname": { "valid": true, "reason": null }, "dkim1": { "valid": true, "reason": null }, "dkim2": { "valid": true, "reason": null } } }
以上でAPIを用いたDomain Authenticationの設定は完了です。これで、送信アドレス横の”sendgrid.net 経由”の表示は出なくなります。一見すると些細な変化ではありますが、メールを確実に届けるためには重要な設定なので、忘れずにやってみてください!