Posted at

PHPでSendGridを使ったメール送信サンプル

More than 1 year has passed since last update.

Webアプリに組み込んで何かをトリガーにして送信…ではなく、例えば何らかのサービスの生存をチェックして、落ちてるときにはメール発報、みたいな使い方をイメージしてます。ちょっと前までだったら、普通に mail() で送ればいいじゃないという話なんだけど昨今の事情を鑑みるとクラウドサーバからメール送信できないとか普通にあるっぽいので。

なお、結論から言うとめちゃくちゃ簡単&便利。今回は書いてないけど、SendGrid側でどれだけ開封されてるか、とかが確認できるのもナイス。


準備

事前に https://app.sendgrid.com/settings/api_keys でAPIキーを作成しておく。

作成後に表示されるAPIキーは一度しか表示されないのでこれを大事にとっておいて、以下の内容で.envファイルを作成し、APIキーを記述しておく。

export SENDGRID_API_KEY='hogehogefugafuga'

このファイルを読み込むため、下記コマンドを実行。

source .env

念の為、ちゃんと読み込めてるか確認する。

echo $SENDGRID_API_KEY

hogehogefugafuga

\(^o^)/


インストール

sendgridのパッケージをインストール。

composer のインストールは https://getcomposer.org/download/ こちらから。

composer require sendgrid/sendgrid


PHP側作業

githubにあるサンプルをベースにちょこちょこ修正する。下記は修正前。test.phpという名前で作ってみる。


test.php

<?php

require 'vendor/autoload.php'; // If you're using Composer (recommended)
$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", "<strong>and easy to do anywhere, even with PHP</strong>"
);
$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";
}

でもって動作確認。

php test.php

すげー。これだけでメール送れる!めっちゃ簡単!!!

cronとかで回すときは、

10 * * * * source path/to/.env ; php test.php

のようにして環境変数を使うのが良さそう。