くずきのblog

技術とか色々

Laravelでメール送信する際にSendGridを使う

自社のサービス(Laravel)では、メールを送信する際にはSMTPの仕組みを利用している。
グーグルのメールアドレスなどもっていればLaravelのデフォルトの機能でサクッと作れるのだが、送信する際に毎回認証を挟んでいるので、処理に時間がかかったり、大量に捌くには別の仕組みが必要となってくる。

そんな時、前職でSendGridを利用していたのを思い出したので今回利用してみたという話。

SendGridとは?

メールの配信に特化したSaaS
12000通/月までは無料で使えるので、試したい人はサクッと試せていいね。

sendgrid.kke.co.jp

また、メール配信の仕組み上サードパーティを通すと信憑性にかけてしまうため、SendGridでは SPFDKIM の機能を提供している。
詳細に関しては、以下を参照

簡単にいうと、SPFは送信元のIPアドレスがそのドメインからから許可されていて、DKIMドメインが署名していることと改ざんがされていないことを保証することらしい。

ここら辺の記事も参考になりそう。

milestone-of-se.nesuke.com

SPF/DKIMの設定方法

Whitelabel機能にドメインを設定する

SendGridではWhitelabelという名前でSPFDKIMなどの機能を提供している。
ただし、最低プランの課金は必要なので注意。 f:id:kzkohashi:20180411201441j:plain

DNSでの設定

次に先ほど取得したドメイン名とデータをDNSのレコードに追加する。
(画像はRoute53)

f:id:kzkohashi:20180411201454j:plain

結果

Laravelの設定の前に結果だけいってしまうと、画像の通り設定したドメインから署名されたことになっている。

f:id:kzkohashi:20180411201508j:plain

Laravelでの設定

SendGridでは色々な言語でライブラリを提供している。実際にPHPで実装している例もある。

sendgrid.kke.co.jp

Laravelにはすでにメール機能があるので、それに乗っかりたいなーと思っていたら、ありました。公式の実装とは少し異なっていて、Guzzleで通信周りを実装しているみたい。

github.com

READMEにもあるように、数カ所設定したら実装完了で、ブログで説明することがなかったというくらい簡単に使えた。あまりにも寂しいので、メールを送信してる箇所を一部見せる。

<?php

public function toMail($notifiable)
{
    return (new MailMessage)
                ->subject('登録お申し込み受け付け')
                ->greeting($this->client_name .'')
                ->line('この度は、FIXAへお申し込みいただき誠にありがとうございます。')
                ...
                ->cc(env('OFFER_MAIL_ADDRESS'))
                ->view('mail.regist');
}
    

感想

SendGridではメールの開封有無や送信の失敗とかも取得できるので、近々そこらへんも取得してみたいと思う。