Laravelでメール送信する際にSendGridを使う
自社のサービス(Laravel
)では、メールを送信する際にはSMTP
の仕組みを利用している。
グーグルのメールアドレスなどもっていればLaravel
のデフォルトの機能でサクッと作れるのだが、送信する際に毎回認証を挟んでいるので、処理に時間がかかったり、大量に捌くには別の仕組みが必要となってくる。
そんな時、前職でSendGrid
を利用していたのを思い出したので今回利用してみたという話。
SendGridとは?
メールの配信に特化したSaaS。
12000通/月までは無料で使えるので、試したい人はサクッと試せていいね。
また、メール配信の仕組み上サードパーティを通すと信憑性にかけてしまうため、SendGridでは SPF と DKIM の機能を提供している。
詳細に関しては、以下を参照
簡単にいうと、SPF
は送信元のIPアドレスがそのドメインからから許可されていて、DKIM
はドメインが署名していることと改ざんがされていないことを保証することらしい。
ここら辺の記事も参考になりそう。
SPF/DKIMの設定方法
Whitelabel機能にドメインを設定する
SendGrid
ではWhitelabel
という名前でSPF
やDKIM
などの機能を提供している。
ただし、最低プランの課金は必要なので注意。
DNSでの設定
次に先ほど取得したドメイン名とデータをDNS
のレコードに追加する。
(画像はRoute53)
結果
Laravel
の設定の前に結果だけいってしまうと、画像の通り設定したドメインから署名されたことになっている。
Laravelでの設定
SendGrid
では色々な言語でライブラリを提供している。実際にPHP
で実装している例もある。
Laravel
にはすでにメール機能があるので、それに乗っかりたいなーと思っていたら、ありました。公式の実装とは少し異なっていて、Guzzle
で通信周りを実装しているみたい。
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
ではメールの開封有無や送信の失敗とかも取得できるので、近々そこらへんも取得してみたいと思う。