1. TOPTOP
  2. Webサービス
  3. SendGrid

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

|

sendgrid_tranzaction_mail_send_1_0

前回の記事(新しいタブで開く)ではSendGridのトランザクションメールを送信するために、macOSのターミナルからcurlコマンドを使って送信しました。今回の記事ではPHPを使ってトランザクションメールを送信する方法をご紹介します。

PHPでトランザクションメールを送信する

PHPを使ってSendGridのトランザクションメールを送信するにあたり、下記のページを参考にしました。

なお後述しますが以下の手順では、なぜか認証エラー(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_tranzaction_mail_send_4_1

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のメールが送信できるはずです。

sendgrid_tranzaction_mail_send_4_2

先述しましたように、なぜか”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で送信することです。「とりあえずメールが飛べば良い」という考え方なので、環境変数の設定(新しいタブで開く)などはこだわらないようにしました。

sendgrid_tranzaction_mail_send_4_3

なお上記はPHPでトランザクションメールの送信に成功したときの画面です。ステータスコードとして”202 Accepted”が表示されています。