前回の記事ではSendGridのトランザクションメールを送信するために、macOSのターミナルからcurlコマンドを使って送信しました。今回の記事ではPHPを使ってトランザクションメールを送信する方法をご紹介します。
PHPでトランザクションメールを送信する
PHPを使ってSendGridのトランザクションメールを送信するにあたり、下記のページを参考にしました。
- sendgrid/sendgrid-php: The Official SendGrid Led, Community Driven PHP API Library
- PHPでメール送信!SendGridを使って簡単に実装する方法 | SendGridブログ
- Composerを使ってないphpのアプリにComposerを導入する – Qiita
- Composer
なお後述しますが以下の手順では、なぜか認証エラー(401 Unauthorized)が発生してメール送信ができませんでした。参考程度に読み進めていただければ幸いです。
開発環境とPHPのバージョン確認
[vagrant@localhost ~]$ php -v PHP 5.6.34 (cli) (built: Feb 28 2018 10:26:09)
Vagrant内にインストールしているPHP5.6.34を使用しています。PHPのバージョンは5.6系以外では7.x系も使用できます。
API Keyを保存するための環境設定
$ pwd /home/vagrant $ mkdir sendgrid_php $ cd sendgrid_php $ touch .env.sample $ cp .env.sample .env $ vi .env API_KEY=api_key source ./.env
SendGridでメールを送信するディレクトリを作成して、その中で以前の記事で作成したAPI Keyの文字列を入力します。またその環境設定のファイル(.env)をシェルの設定としてsourceコマンドで即座に反映させます。
Composerのインストール
$ pwd /home/vagrant/sendgrid_php $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('sha384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" $ php composer-setup.php $ php -r "unlink('composer-setup.php');"
PHPでSendGrindのトランザクションメールを送信するためには、SendGridが開発した専用パッケージが使用します。その専用パッケージをインストールするためには、パッケージ管理ツールのComposerが必要です。上記の”php”で始まる4つのコマンドを使ってComposerをインストールします。
なおコマンドの内容はComposerのダウンロードページからそのままコピペをしています。
SendGridパッケージのインストール
$ pwd /home/vagrant/sendgrid_php $ php composer.phar require sendgrid/sendgrid $ touch index.php $ ls -la
Composerをインストールすると、「”php composer.phar“というコマンドを使ってください」という文言がmacOSのターミナル画面に表示されます。
sendgrid/sendgridパッケージのインストールが完了し、トランザクションメールを送信するためのファイルであるindex.phpを作成すると、ディレクトリ内部はこのような構成になります。ちなみにsendgrid/sendgridパッケージはPHPのパッケージ集サイトであるPackagistから発見しました。
PHPコードの記述
$ vi index.php
[php]
<?php
require ‘vendor/autoload.php’;
$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(‘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]
index.phpに上記のPHPコードを記述します。送信元・送信先のアドレスとAPI Keyなどは適宜入力してください。
トランザクションメール送信の確認
$ php index.php
最後にphpコマンドでindex.phpを実行してメールを送信します。理屈の上ではここまでの手順でPHPによるSendGridのメールが送信できるはずです。
先述しましたように、なぜか”401 Unauthorized”のエラーが発生してトランザクションメールは送信できませんでした。API Keyのコピペミスを確認しましたが、文字列が正しい状態でもエラーが発生します。2018年11月28日の時点でどこに問題があるのか分かっていません。
2018年12月19日(水)追記
PHPでメールを送信する方法が分かりました。PHPのコードを下記の内容にします。
[php]
<?php
require ‘vendor/autoload.php’;
$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(‘SENDGRID_API_KEY’); // APIキーの文字列をそのままコピペ
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]
上述したコードと異なる点は12行目です。SendGridで定義しているgetenvメソッドで定数を読み取ることをやめて、取得したAPIキーをそのまま貼り付けています。
今回の目標はSendGridのトランザクションメールをPHPで送信することです。「とりあえずメールが飛べば良い」という考え方なので、環境変数の設定などはこだわらないようにしました。
なお上記はPHPでトランザクションメールの送信に成功したときの画面です。ステータスコードとして”202 Accepted”が表示されています。