SendGridについて
- SendGrid → クラウドメール配信サービス
- 主要なプログラミング言語用のライブラリが提供されている
- 月12000通までは無料で送信できる
- SendGridを経由して送信したメールのアナリティクスが行える模様
- メールの送信はWebAPI方式とSMTPリレー方式がとれる
- どっちを使えばいいかについて → Web APIかSMTPリレーか: どうやってメールを送ればいいの? | SendGridブログ
アカウントの発行
以下は個人アカウントを発行した際の手順です。法人の場合は少し違うかもしれない。
記憶を頼りに書いてるとこがあるので微妙に誤りがあるかもしれないです。。
- ヘッダーに表示されている「新規登録」ボタンクリック
- メールアドレス入力(仮登録)
- 確認メール内のリンククリック
- フォームで個人情報入力(本登録)
- SendGridの導入先のドメインも入力した(imo-tikuwa.com)
- 無料アカウントなので支払い情報(クレカとか)を入力する場所はなかったような気がする
- 審査が入る
- ドメインの所有者であることの証明が必要
- 今回はドメインのTXTレコードにメール内に指定された文字列の設定を行った
- 他にも導入先のドメインで参照できるサイト内のプライバシーポリシーに個人名を記載したり、SendGridに関するページを作成したりといった確認方法が行える模様
- 設定した内容についてメールで返信する
- 審査が通ってログインアカウントが通知される
という流れでした。
私のメールチェックが1日1回だったのが原因ですが仮登録から始めて2日くらい掛かりました。
アカウント発行は余裕をもった作業とするのが良いと思います。
ダッシュボード画面
日本語ではないけどそこまで難しいこと書いてないので多分大丈夫だと思います。
APIキーの発行
メールの送信を行うにはAPIキーが必要。
管理画面にログインして以下の手順で発行します。
ダッシュボード > Settings > API Keys > Create API Key
WebAPI方式について
新規開発するプロジェクトであればこちらの方式を利用するのが良いと思います。また、既存のプロジェクトでもしっかりとメール配信処理がまとまっていれば改修箇所は1か所なのでこちらを利用するのが良いかも。
メール送信は本番環境リリース時にわちゃわちゃしがちなので特に理由がなければアプリケーション側で完結させておくべきかなと思います。
主要な言語用のライブラリとサンプルのプログラムが存在するのでガイドを参考にすれば簡単に導入できると思います。WebAPIなのでリクエストを送ることさえできれば使用できるみたい。
Node.js、Ruby、Python、Go、PHP、C#、Javaの他、curlを使ったスクリプトからの使用も可能な模様。
PHPのライブラリを例としてみるとcomposerでインストール可能なライブラリ形式で提供されているため導入が非常に簡単。
composer require sendgrid/sendgrid
ソースはGitHubで公開されているのでcomposerが使えないようなサーバーでもインストールは可能、そちら場合の手順も紹介されてました。
GitHub:GitHub – sendgrid/sendgrid-php: The Official Twilio SendGrid Led, Community Driven PHP API Library
SMTPリレー方式について
既存のプロジェクトで
- WebAPIライブラリのシステム要件を満たしていない
- メール送信処理が散らばっている
- メール送信を設定可能なSMTPサーバーから行っている
のようなときはこちらを検討しても良いかと思います。
こちらの場合はアプリケーション側のプログラムを一切変更せずに対応できるのが利点。
また、WebAPIを使った実装が可能な場合もメール送信箇所の洗い出しだったり動作確認だったりを送信処理の数だけやらないといけないのは疲れると思います。
今回職場の業務の中でSMTPリレーを使った送信を導入する機会があったので、当サイトでもSMTPリレーの設定を実際に行ってみました。
SMTPリレー方式でメールを送信
以下の手順を参考にしました。
参考:PostfixからSendGridへのリレーをカスタマイズする | SendGridブログ
smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_tls_security_level = may transport_maps = hash:/etc/postfix/transport smtp_sasl_password_maps = hash:/etc/postfix/relay_password
* smtp:[smtp.sendgrid.net]:587 # gmail.com宛のときだけリレーする場合は以下のような感じ # gmail.com smtp:[smtp.sendgrid.net]:587 # * :
[smtp.sendgrid.net]:587 apikey:[ダッシュボードで発行したSendGridのAPI Key]
# postmap /etc/postfix/transport # postmap /etc/postfix/relay_password # /etc/init.d/postfix restart
SMTPリレー方式の動作確認
動作確認として以下のようなコマンドを実行
# sendmail [自分の@gmail.comメールアドレス] To: [自分の@gmail.comメールアドレス] From: no-reply@imo-tikuwa.com Subject: Test Mail1 SendGridを利用したメール送信テスト .
メールのFrom欄に”sendgrid.net 経由”という表示が付いたメールが迷惑メールフォルダに振り分けられることなく正常に届くことが確認できました(^^)b
メール内のリンクが変わる場合
テキストメール本文中のURLが含まれると以下のような形式に変わってしまいました。
# sendmail [自分の@gmail.comメールアドレス] To: [自分の@gmail.comメールアドレス] From: no-reply@imo-tikuwa.com Subject: Test Mail1 SendGridを利用したメール送信テスト URLてすと:https://github.com/imo-tikuwa .
これはSendGridのClickTrackingという設定が有効なことが原因でした。
ダッシュボード > Settings > Trackingで設定をOFFに変更しました。
設定後、URLが送信したときのまま表示されるようになったことを確認しました。
メールの末尾に署名としてサイトのURL等を乗っけることが多いと思うのでこの設定はOFFにすることが多いかも。
メールのソースについて
Gmail宛に送信したメールのソースを確認しました。
DKIMについてsendgrid.netでの認証が行われていることが確認できました。
“sendgrid.net 経由”の表示について
上の方に載せたSMTPリレー方式でのメール送信の際にメールに「sendgrid.net 経由」と表示される件について調べたところ、SendGrid公式ドキュメントの「独自ドメイン利用設定(Sender Authentication)」の設定を行うことで消せました。
参考:独自ドメインを利用する – ドキュメント | SendGrid
以下にアクセス
ダッシュボード > Settings > Sender Authentication > Authenticate Your Domain
①の選択肢は未選択
②は初期値のまま
送信元のドメインを入力
Advanced Settingsは初期値のまま
CNAMEが3つ表示されるのでコピーして送信元ドメインを管理してるサービスにログインしてDNSレコード設定
私のimo-tikuwa.comはお名前.comで管理してるのでお名前.comのコントロールパネルにログインしてDNSレコードの設定画面で設定しました。
お名前.comでの設定後、少し時間をおいてSendGrid側のVerifyボタンをクリックして「It worked!」という画面が表示されることを確認。
ドメイン認証後、テストメールをgmail宛に送信したところ”sendgrid 経由”の表示が消えていることが確認できました。
その他
AWSのSESと比べて提供側の情報が見やすくてすんなり導入できました。
日本語のドキュメントが画像付きで分かりやすい。
今回はすべてのメールをSendGridでSMTPリレーするという設定を行いましたが、Postfixのtransportで何かと迷惑メールに振り分けられがちなGmailアカウントに対してだけSMTPリレーを行う設定をすれば、月間のメール配信数を抑えつつSendGridを使うといったこともできそうです。
WebAPIを利用する方式については未確認ですが、調べてみると送信に失敗したときにエラーが返ってくるようになっている模様。PHPのmb_send_mailだと難しいメール送信処理の成否チェックなんかも行えそうです。