この記事は、中小・零細企業がITを活用してビジネスが活性化することを願って作成しました。
最近ではレンタルサーバーのSMTPサーバーから配信された独自ドメインのメールが、相手先のGmailなどの迷惑メールフォルダに入ってしまうことが多くなってきました。そうした弊害があると、「メールを送ったのに相手へ届いていない」ということが多くなり、せっかくのビジネスチャンスを逃してしまうことがあります。
こうした問題の解消方法として、SendGridはひとつの解決策となりうるでしょう。
SendGridを活用して、基本的にはメール送信の到達精度を高めていくことができます。
SendGrid導入のきっかけは、こちらのツイートです。
僕の場合は SendGrid 一択ですね。メールの不達に悩むくらいなら月1万円払います
— 🍣大河内健太郎🕊💉 (@nanasess) May 14, 2020
8万件も EC-CUBE のサーバーから送信していれば、使用されなくなっているメールアドレスが含まれている可能性も高いです。 EC-CUBE には、宛先不明のメールアドレスをクリーニングする機能は無いので、それに何度も送信していると SPAM サーバー扱いされたりします。
— 🍣大河内健太郎🕊💉 (@nanasess) May 14, 2020
メール自体には、そもそもこちらの記事にあるようなかなり深い技術的な内容だったり、さまざまな問題点はあるようなのですが、基本的にはSendGridを活用することにより、メールの到達精度は上がることが期待できると思っていただいて申し分ないかと思います。
また、通常のレンタルサーバーではメルマガ配信系の機能が乏しいことが多いのですが(オマケ程度の機能だったりすることが多いです)、SendGridではメールマガジンの配信なども行うことができます。さらに、SendGridでは、メールの開封率・リンクのクリック率などを把握することができます。
価格帯も、月間送信数などに応じてFree(無料)プラン~10万円台と、様々なプランがあるのが特徴です。
無料プランでも月間の送信上限数が12,000通まで使用することが出来ます。

今回は、以下の3パターンに分けてSendGridを導入していきます。
- WordPressへの導入(WP Mail SMTPプラグインの無料版を使用する)
- EC-CUBEへの導入(SMTPサーバーへの接続を行う)
- Gmailで別のアドレスからメール送信を行う機能を使用して、SMTPサーバーへの接続設定を行う
いずれもSendGridのSMTPリレー機能を使用しますが、単純にSendGridはSMTPサーバーを利用することができるということです。
それでは、やっていきましょう!
今回は、まずはSendGrid経由でメール送信できることをゴールにするため、SMTPリレー・ドメイン認証の設定方法のみ取り扱います。メルマガ配信系については、改めて記事を追加するかもしれません。
SendGridにおいて、APIキーの利用および二段階認証設定の必須化が行われています。2021年2月18日までに以下の対応を終える必要があります。
- APIキー認証を利用してメールの送信を行う必要があります(ユーザ名/パスワード認証は利用できなくなる)。
- AuthyアプリまたはSMSを使用した、二段階認証を行う必要があります。
具体的には、1. に関しては、このブログで紹介しているSMTPリレーを使用した設定方法であれば、何か追加で設定変更を行う必要はありません。2. に関しては、手元にスマートフォン等を用意していただき、AuthyアプリまたはSMSを使用した二段階認証を設定する必要があります。具体的な設定箇所は以下の通りです。
SendGrid管理画面にログインをし、Setting>Two-Factor Authenticationをクリックして、

Add Two-Factor Authenticationをクリックして設定しましょう。私はSMSで設定しました。

なお、期日までに二段階認証の設定が完了されていない場合、SendGridダッシュボードログイン時、二要素認証設定画面が強制的に表示され、完了まではログインできなくなるようです。
SendGridへの新規登録・初期設定
まず、大前提としてSendGridは1人の個人または法人あたり、1アカウントまで作成できるという点に注意しましょう。SendGridは、1つのアカウント内で、複数ドメインを使用したり複数メールアドレスを使用したりすることができますので、複数ドメインや複数メールアドレスがある場合もご安心ください。
- SendGridの公式サイトへアクセスして、新規登録を行います。メールアドレスを入力して、規約への同意を行い「確認メールを送信する」ボタンをクリックします。
- 「仮登録完了」の確認メールが送信されますので、確認メールに付いているリンクをクリックして本登録へ進みます。
- 必要事項や、アンケートに答えていって本登録を行います。
- 「本登録完了」のメールが送信されますが、すぐに使えるわけではないので(担当者がアカウント情報を手動送信しているようです)、遅くとも平日の翌営業日までは待ちましょう。
- 「SendGridへようこそ!」のメールが届いて、初めてユーザー名が確定します。本メールに記載されたユーザー名・本登録時に入力したパスワードを使用して、管理画面へログインしましょう。
- Gmail側の設定手順はこちらの手順1の1~5まで設定を行い、「エイリアスとして扱います」のチェックは解除した(外した)状態で、次のステップへ進むボタンをクリックします。一旦Gmail側の画面は出したままで止めておきます。
- SendGridの管理画面へログインします。
以下の画面が出たら、SendGrid経由で送信したいメールアドレスを入力し、Send Confirmation Emailボタンをクリックします。

以下の画面が出たら、×マークをクリックします。

確認メールが届きますので、届いたメールに記載されたリンクをクリックしておきましょう。
- 以下の画面が出てきます。左側のWeb API or SMTP RelayのStartボタンをクリックします。My First API Key Nameという部分だけ、任意の文字を入力する必要がありますが、たとえば「Gmail」などわかりやすいものが良いでしょう。次にCreate Keyボタンをクリックします。


- 以下のようにAPIキーが発行されますので、先程のGmailの画面に入力していきましょう。

Gmail側の画面は以下の通りです。

上記および以下の通りに設定していきます。
SMTPサーバー | smtp.sendgrid.net |
ポート | 587 |
ユーザー名 | apikey とだけ入力をする |
パスワード | SendGrid側で発行されたPassword(APIキー)を入力する |
接続方式 | TLSを使用したセキュリティで保護された接続(推奨) を選択する |
設定が完了したら、まずGmail側は「アカウントを追加」ボタンをクリックします。確認コードが記載されたメールが送信されますので、以下の画面に確認コードを入力して設定を終えましょう。Gmail側の設定は以上です。

SendGrid側はチェックボックスにチェックを入れてNext: Verify Integrationボタンをクリックしましょう。
- 以下の画面が出てきます。これは、設定したGmail側からメールの送信テストをしてみましょうという意味です。ご自身のサブアカウント宛など、適当なメールアドレス宛で良いので、空メールでも送信してみましょう。

メールが正しく送信完了すると、以下の画面が出てきます。

これで、ひとまず設定完了です。
今回設定した内容は、SendGrid側のSettings>API Keysという画面から確認することができます。
APIキー自体を再確認することは出来ません。設定変更したい場合などは、設定変更前のAPIキーを削除して、新規にAPiキーを取り直すと良いでしょう。
あなたの独自ドメインのDNSサーバーにSendGridを設定する
このままでもとりあえずメール送信をすることは出来ますが、長期にわたりSendGridを使用し続けるには、独自ドメイン側でDNSサーバーに、必ずドメイン認証(SPF/DKIM)の設定を行いましょう。
あなたがSendGridで送信したメールが、あなたが所有している独自ドメインから配信されたメールだという証明を行うことが必要です。以前はSPFのみの設定でも良かったのですが、最近ではDKIMなど、他の手段でのドメイン認証もあったほうが到達精度は上がるようです。
設定方法は以下の手順です。
まずSendGridの管理画面Settings>Sender Authenticationの画面を開きましょう。上のDomain AuthencticationのGet Startedをクリックします。

最初のWitch Domain Name Server (DNS) host do you use?の質問については、DNS hostにOther Host (Not Listed)を選択しましょう。その右側のWitch DNS Host?は、空欄で大丈夫です。
そもそも、大体当てはまるものがないはずなので、Other Host (Not Listed)を選択しています。笑
二番目の、Would you also like to brand the links for this domain?は、通常はNoが選択されていますが、これをYesを選択して、Nextボタンをクリックします。

次の画面では、以下の画像のとおりに入力をします。

Domain You Send From | From Domain * に、あなたのドメインを入力します。 |
Advanced Settings | Advanded Settingsのタブを展開して、通常はUse automated securityにチェックが入っているケースがありますが、このチェックを外します。 次のUse custom return pathだけにチェックを入れて、他のチェックはすべて外した状態にします。 ※ここは以下の通りサブドメインを指定しない場合、チェックがなしでも大丈夫です。 |
Return Path | ここでは、サブドメインの***.xxx.comのうち、***の部分だけ入力します。 たとえば、私はsg.xxx.comとしたかったので、ここではsgとだけ入力しました。 |
設定が終わったらNextボタンをクリックします。
以下の画面に出てくるDNSレコードを、すべてあなたのドメイン側のDNSレコードに追記しましょう。

基本的にすべてCOPYボタンがあるので、コピーしていきます。
たとえば、私の場合はネームサーバーにXSERVERのものを使用していますので、エックスサーバーの管理画面からDNSの設定変更をしていきます。エックスサーバーのDNS設定画面は、Xserverアカウント>サーバーパネル>画面右上のDNSレコード設定です。
DNSレコード一覧のタブに、たとえば以下のような内容が既に設定されています。人によっては、この設定と異なるかもしれません。ひとまず消さずにそのまま残しておきます。

次に、DNSレコード追加をクリックして、先程のSendGridの画面に現れたCNAMEレコードを2つ、MXレコードを1つ、TXTレコードを2つコピペで入力していきます。

ここではMXレコードのVALUE(内容)がmx.sendgrid.net.
となっていますが、たとえばエックスサーバーの場合は末尾に.
(ドット)が入っていると正しく入力できない場合があります。その場合は、末尾のドットは省略(削除)してmx.sendgrid.net
と設定してください。
また、ここで設定する優先度はすべて0のままで良いです。
5種類のDNSレコードの設定が終わったら、少し時間を置きましょう。通常、数分~最大48時間でDNSレコードが浸透・反映されていきます。時間を置いたら(基本的には、おそらく数分程度で良いかと思います)、SendGrid側の画面右下のチェックボックスにチェックを入れて、Verifyボタンをクリックします。

この画面が出たら、設定終了です。
もう一度SendGridの管理画面Settings>Sender Authenticationの画面を開いて、以下のような画面になっていれば正しく設定完了です。

これで、ドメイン認証についての設定作業は以上です。
SendGridの特徴
さて、ここまで設定が正しく完了したら、SendGridの管理画面Activityの画面を見てみましょう。たとえば、以下のステータスを見ることができます。
Processed | メール送信中の段階(メール送信リクエストの受付) |
Deliverd | メールが配信された(宛先サーバーによるメール受付) |
Open | 相手によって、HTMLメールが開封された |
Bounce | 相手側へ何らかの理由でメールが配信されなかったエラー |
Deferred | SendGrid側で判断をして、メールを配信しなかった (SendGridでは、一度Bounceが発生したメールアドレス宛には2回目以降は自動的に配信しない仕様になっています。しかしながら、メールを受け取る側の問題が解消された後は、その配信を行わないリストから当該メールアドレスを削除して、再度メール配信ができるように設定の変更が可能です) |
上記以外のステータスについて、詳しくはこちらのページをご確認ください。このようにSendGridではメール配信の状況を確認することができますが、基本的には表示されるイベントの保存期間は7日間で、この期間を過ぎたデータは参照できなかったり、また保存期間内であっても一度に表示できる件数には限りがあります。また、イベントの情報はダウンロードすることができません。
これらを回避するには、公式サイトの「Event Webhookでイベントを受信する」を参照してください。SendGridではWebhookの機能を使用して、予め指定したURLにイベントの情報をPOSTすることができます。
そのほかにも以下の機能や特徴があります。
クリックトラッキング機能 | SendGridでは、メールに記載されているURLを自動的に変換し、メールを受け取った方がリンクをクリックした場合のトラッキング機能を提供しています。しかしながら、このトラッキング機能を有効にした場合、URLがSendGridのものに完全に置き換わってしまう弊害はありますので、不要な方はこの後の説明でトラッキング機能の無効化設定を解説します。 |
海外サーバーから送信 | SendGrid自体は、国内サーバーからではなくて海外サーバーからメール送信を行います。配信完了するまでの時間が、国内サーバーからメールを送信する場合と比べて、全体的に少し遅めになっています(そこまで極端に遅いわけではありませんが)。 |
メールが配信されなかったときの通知を受け取る機能 | SendGridでは、通常そのままではバウンス(メールが配信されなかった)の通知を受け取ることが出来ませんが、必要な方はこの後の説明で通知を受け取ることが出来るように設定変更可能です。しかしながら、通知が受け取れるのは、メールのステータスがBounceのときだけで、Deferredの場合には通知が受け取れないので注意が必要です。 |
追加でSendGridの設定を行う
必要な方は、追加で以下の設定を行いましょう。
- クリックトラッキング機能の無効化
- メールが配信されなかったときの通知を受け取る(バウンス発生時の通知メールの受信)
- バウンスしたメールの配信先の問題が解消された後に、再度メール配信を行うために、バウンスリストからメールアドレスを削除し、再配信を可能にする
クリックトラッキング機能の無効化
先程も解説した通り、SendGridでは、メールに記載されているURLを自動的に変換し、メールを受け取った方がリンクをクリックした場合のトラッキング機能を提供しています。しかしながら、このトラッキング機能を有効にした場合、URLがSendGridのものに完全に置き換わってしまう弊害がありますので、不要な方は無効化の設定をしましょう。
そのほか、クリックトラッキング機能を有効化すると、メール自体が自動的にHTMLメールに変換されてしまうため、相手側の受信環境によっては、文字化けを起こしてしまう可能性もあるようですので、理由がない限りは無効化で良いでしょう。
Settings>Tracking内の、Click TrackingのAlso enable click tracking in plain text emailsのチェックボックスを外し、ENABLEDをDISABLEDに設定変更していただければ、設定完了です。

メールが配信されなかったときの通知を受け取る
SendGridでは、通常そのままではバウンス(メールが配信されなかった)の通知を受け取ることが出来ませんが、必要な方はこの後の説明で通知を受け取ることが出来るように設定変更可能です。
Settings>Mail Settings>Event Settigs>Forward Bounce Messagesから、通知先のメールアドレスを入力し、DISABLEDをENABLEDに設定変更を行います。

しかしながら、通知が受け取れるのは、メールのステータスがBounceのときだけで、Deferredの場合には通知が受け取れないので注意が必要です。
バウンスしたメールの配信先の問題が解消された後に、再度メール配信を行うために、バウンスリストからメールアドレスを削除し、再配信を可能にする
SendGridでは、一度でもバウンスが発生した宛先へのメールアドレスへの配信は行わないようになっています。そのため、配信先のメールアドレスの所有者側で、配信の問題が解消された後に再度メールの配信を行いたい場合は、SendGrid側のバウンスリストからメールアドレスを削除し、メールの再配信を可能にする必要があります。
Suppressions>Bouncesから配信しない先のメールアドレスを削除することができます。
これで、設定完了です。
詳しくはSendGrid公式のこちらのページもご確認ください。
WordPressにSendGridを設定する
WordPressにSendGridを導入する場合、WP Mail SMTPプラグインの無料版を使用します。公式ディレクトリ(WordPressの管理画面からプラグイン>新規追加を開く)からインストールして有効化しておきます。このプラグインは、有償版ではなくて大丈夫です。
既にこのプラグインを使用している方は、既にレンタルサーバーのSMTPサーバー経由でメール送信を行う設定になっていると思いますし、そうではない方は通常Sendmail機能を使用してメール送信を行う設定になっているはずです。
ここでは、それらの設定をSendGridに設定していきます。
APIキーを追加発行する
まず、SendGrid管理画面からEmail API>Integration Guideを開いて、右側のSMTP Relayをクリックします。

再度、以下の画面が出ますので任意のAPIキーの名前(My First API Key Name)を入力しておきます。
たとえば、WordPressといった名前や、複数のWordPressが存在する場合、見分けられる名前にしておくと良いでしょう。APIキーの名前は後からでも変更可能です。名前が決まったら、Create Keyボタンをクリックします。


ここで発行されたAPIキーをWordPress側に設定していきます。
WP Mail SMTP側の設定
WordPress管理画面の、WP mail SMTPというメニューを開きます。
一般タブの中から、以下の通りに設定していきます。
- 送信元アドレスはこれから設定を行うメールアドレスを、送信者名は任意の何かを入力します。メールヘッダーのfromに付与されるものです。メーラーは右上のSendGridを選択します。ここでは、Force From Email/Force From Nameはそれぞれチェックを外しておきます(チェックを入れるてしまうと、すべての送信メールが、このfromの情報に書き換わってしまいます。要所要所で別の差出人名などを付与したい場合に不便になります)。

- APIキーには、先程発行されたAPIキー(Password)を入力して設定を保存します。Sending Domainには、DNSレコードの設定でMXレコードに設定されているサブドメイン(例:sg.xxx.com)を入力します。

WordPress側はこれでOKです。
- SendGrid側の管理画面に戻ります。Next: Verify Integrationをクリックすると、以下の画面に移り、テストメールの送信を促されます。

WP Mail SMTPの画面では、Email Testタブに移り、適当なメールアドレス宛にテストメールを送信しておきます。

Send Toに適当なメールアドレスを入力し、Send Emailボタンをクリックします。
テストメールが無事に送信されましたでしょうか?自動的にSendGrid側で以下の画面に切り替わります。切り替わったら設定終了です。

おめでとうございます。
今回設定したAPIキーの内容は、後からまたSendGrid側のSettings>API Keysという画面から確認することができます。
EC-CUBEにSendGridを設定する
EC-CUBEの場合、前項のWordPressの設定方法と同じく、SendGrid側でAPIキーを発行する部分の設定は同じなのですが、EC-CUBE側では.env
の以下の部分を修正します。
たとえば、以下のようになっているのを(他のになっていてもOKですが)、
MAILER_URL=smtp://SMTPユーザー:SMTPパスワード@sv***.xserver.jp:587?auth_mode=plain
上記を、まるっと以下の通りに書き換えます。
MAILER_URL=smtp://smtp.sendgrid.net:587?&username=apikey&password=発行されたAPIキー(Password)
これで設定完了です。
EC-CUBE本体の問い合わせフォームなどを利用して、一通のテストメールを送信して設定完了です。