どうも、こんにちわ。
最近周りでもLaravelでシステム構築する案件が着実に増えてきていることを実感していますが、今回はLaravelでSendGridを使ってSMTP方式でメール送信する方法を紹介したいと思います。
本来はSMTPではなくWebAPIでメール送信した方がいいのですが、とりあえず今回はSMTPでのメール送信方法をまず紹介したいと思います。
なお、Laravelとはなんぞやという方は下の記事を参照してください。
環境
なお、今回の環境は下記の通りとなります。
今回の環境
- AWS EC2(Amazon Linux AMI)
- Laravel 5.5
- PHP 7.1.17
AWSのEC2で運用しているLaravelアプリケーションでLaravelのバージョンは5.5、PHPのバージョンは7.1.17という環境になります。
SendGridとは?
さて、早速設定方法を紹介していきたいところですが、その前に簡単に「SendGrid」の紹介をしておきたいと思います。
SendGridとはメール送信を行ってくれるクラウドサービスになり、その到達率の高さやクラウドならではの拡張性、または配信状況や開封状況なども確認できることから多くの企業やWebアプリケーションで採用されているサービスになります。
公式サイトの導入事例を見ても、「クラウドワークス」や「Chatwork」などWeb系の仕事をされている方なら誰もが知っている企業やサービスで実際に導入されていることが分かりますね。
メールサーバーって自前で構築して運用するとなると到達率など様々なハードルがあって結構大変なので、こういったサービスはとても需要がありますよね。
LaravelでSendGridを使う方法
ということで、実際に設定方法を紹介していきたいと思います。と言ってもとても簡単なのですぐ終わります。
envファイルに必要情報を記載
公式サイトのこちらのページで紹介されているようにLaravelの.envファイルに必要情報を記載してあげればいいだけです。(下記公式サイトから引用)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=sendgrid_username
MAIL_PASSWORD=sendgrid_password
MAIL_ENCRYPTION=tls
MAIL_FROM_NAME="John Smith"
MAIL_FROM_ADDRESS=from@example.com
これだけです。念のため、各項目を1つずつ説明します。
MAIL_DRIVER
MAIL_DRIVERはその名の通りメールドライバーになります。今回はSMTP方式なので、「smtp」と入力してください。
MAIL_HOST
MAIL_HOSTは、sendgridのホスト名になります。上記のコードの通り「smtp.sendgrid.net」と入力してください。
MAIL_PORT
MAIL_PORTもその名の通り、メール送信で使用するポート番号になります。ここもマニュアル通り「587」と入力してください。
MAIL_USERNAME
MAIL_USERNAMEは、ユーザー名になるのでアカウント作成時に発行されたユーザーIDを入力してください。英数字の羅列のあとに「@kke.com」になっているやつですね。
MAIL_PASSWORD
MAIL_PASSWORDもアカウント作成時に自分で決めたパスワードを入力してください。
MAIL_ENCRYPTION
MAIL_ENCRYPTIONは暗号化になります。こちらも上のコードの通り「tls」と入力してください。
MAIL_FROM_NAME
MAIL_FROM_NAMEは、送信元の名前になります。メールを送信して受信したユーザーのメールソフトで表示される名前です。ご自分の環境に沿った名前を自由に決めてください。
MAIL_FROM_ADDRESS
MAIL_FROM_ADDRESSは、送信元メールアドレスになります。ここも自由に決めてください。大抵は「noreply@example.com」や「support@example.com」といったメールアドレスが多いかと思います。
全て入力したらLaravelの設定は完了です。
AWSのアウトバウンド設定で587ポートを開放する
Laravelの設定が完了したら、続いてAWS側の設定をします。別にこちらから設定しても大丈夫です。
AWSの管理画面にログインして、LaravelがインストールされてあるEC2に紐づいているセキュリティグループのアウトバウンドを開いて(下図参照)、先ほどLaravelで設定したポート番号(587)を開放するだけです。
これでAWS側の設定は完了です。
まとめ
これで全ての設定が完了したのでメール送信ができるようになっていると思います。送信ができるようになればSendGridのダッシュボードでリクエスト回数や到達率、開封状況が見れるので確認してみてください。ただ、ダッシュボードへの反映にはタイムラグがあるので少し時間をおいて確認するといいと思います。
ということで、今回はAWSのEC2上で運用しているLaravelアプリケーションからSendGridを使ってメールを送信する方法を紹介させていただきました。
SendGridの公式でも推奨されていますが、本来であればポートの開放も必要ないWebAPIのほうがおすすめです。WebAPIを使用して送信する方法についてはまた次の機会に紹介したいと思います。
それでは、今回はここまで!また!