SendGridでトランザクションメールを送信する方法(その4)〜PHPでメール送信

前回の記事(新しいタブで開く)では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 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"; }
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 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"; }
上述したコードと異なる点は12行目です。SendGridで定義しているgetenvメソッドで定数を読み取ることをやめて、取得したAPIキーをそのまま貼り付けています。
今回の目標はSendGridのトランザクションメールをPHPで送信することです。「とりあえずメールが飛べば良い」という考え方なので、環境変数の設定(新しいタブで開く)などはこだわらないようにしました。
なお上記はPHPでトランザクションメールの送信に成功したときの画面です。ステータスコードとして”202 Accepted”が表示されています。
- API key
- Composer
- composer.phar
- JavaScript
- Packagist
- PHP
- php composer.phar require sendgrid/sendgrid
- PHPででSendGridのトランザクションメールを送信する方法
- SendGrid
- SendGrid API Key
- SendGrid Web API
- sendgrid/mailパッケージ
- sendgrid/sendgridパッケージを使用してトランザクションメールを送信する
- SendGridでAPI Keyを作成する方法が分からない
- Web API
- トランザクショメール
- トランザクションメールの送信
- 未解決
- 解決済み
- 質問