どうも、こんにちわ。
先日、LaravelでSendGridのSMTP方式でメール送信する方法を紹介させていただきましたが、今回はSMTPではなくWebAPIを使用してメール送信する方法を紹介したいと思います。SendGridの公式サイトでもWebAPIの使用を推奨しているので、出来るだけWebAPIで送信すると良いと思います。
なお、Laravelとはなんぞやという方は下の記事を参照してください。
また、前回のSMTP方式で送信する方法はこちら。
環境
なお、今回の環境は前回同様下記の通りとなります。
今回の環境
- AWS EC2(Amazon Linux AMI)
- Laravel 5.5
- PHP 7.1.17
- SendGrid WebAPI V3
AWSのEC2で運用しているLaravelアプリケーションでLaravelのバージョンは5.5、PHPのバージョンは7.1.17という環境になり、SendGridのWebAPIはバージョン3になります。
LaravelでSendGrid WebAPIを使う方法
ということで、実際に設定方法を紹介していきたいと思います。
APIキーを作成する
まずは、SendGridのこちらのページからAPIキーの作成をします。
下図の赤枠で囲っている右上の「Create API Key」をクリック。

APIキーの作成画面が表示されるので、適当にAPIキーの名前を入力して、APIキーのパーミッションを設定します。今回は下図の通り名前は「example」で、パーミッションは「Restricted Access」で進めていきます。

なお、パーミッションに関しては「Full Access」だと全てのエンドポイントにアクセスが可能な状態で、「Restricted Access」は制限をカスタマイズでき、「Billing Access」に関しては通常ユーザーは使えない機能のようです。
「Restricted Access」を選択すると、下図のように詳細設定画面が出てくるので諸々設定していきます。今回は便宜上「Mail Send」のみにアクセスを許可します。
設定したら右下の「Create & View」をクリックします。

APIキーの作成が完了すると、下図のようにAPIキーが発行されます。APIキーは下図の黒く塗りつぶした箇所に表示されます。

なお、このAPIキーはセキュリティ上の理由で一度しか表示されないので、この時点でコピーして安全な場所に保管しておきましょう。
メール送信テスト
APIキーが作成されたら実際にメール送信ができるかテストしていきます。テスト方法は公式サイトに載っている下記の方法でテストしてみます。
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "example@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
上のコードはサンプルコードなので、APIキーや送信先のメールアドレスなど適宜自分の環境に合わせて編集してください。
問題なければ実際にメールが送信されると思います。
なお、GUIで確認したい場合はPOSTMANなどのツールを使うといいと思います。
Laravelに実装する
SendGridでAPIキーの作成が完了しテスト送信で問題なく動作していることを確認したら、Laravelに実装していきます。
今回はSendGridの公式が公開しているPHPライブラリを使った方法で送信したいと思います。
.envファイルを編集
まず、.envファイルを開いて「SENDGRID_API_KEY」というパラメータを追加して、そちらに先ほど作成したAPIキーを設定します。
SENDGRID_API_KEY=SendGridで作ったAPIキー
composer.jsonの編集
続いて、ライブラリをインストールするためにcomposer.jsonのrequireの箇所に下記の通りコードを追記します。
{
"require": {
"sendgrid/sendgrid": "~7"
}
}
composerのアップデート
追記したらcomposerをアップデートしましょう。
composer update
実装
あとは公式の通り、実装すればいいだけです。(下記コードは公式のコードを引用)
$email = new \SendGrid\Mail\Mail(); $email->setFrom("test@example.com", "Example User"); $email->setSubject("Sending with SendGrid is Fun"); $email->addTo("test@example.com", "Example User"); $email->addContent("text/plain", "and easy to do anywhere, even with PHP"); $email->addContent( "text/html", "and easy to do anywhere, even with PHP" ); $sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY')); try { $response = $sendgrid->send($email); print $response->statusCode() . "\n"; print_r($response->headers()); print $response->body() . "\n"; } catch (Exception $e) { echo 'Caught exception: '. $e->getMessage() ."\n"; }
こちらのコードを環境に合わせて適宜編集すれば完了です。
これでLaravelからSendGridのWebAPIを使ってメール送信ができると思います。
まとめ
ということで、今回は前回のSMTP方式での送信に続いてWebAPIを使ってメール送信する方法を紹介させていただきました。
調べたらLaravel用のライブラリも用意されていたので、次回はそのライブラリを使って送信する方法を紹介したいと思います。
それでは、今回はここまで!また!