PHPからSendGridを使ってトランザクションメールを送信する方法

PHPからSendGridを使ってトランザクションメールを送信する方法

この記事は Send Transactional Emails in PHP with Twilio SendGrid の抄訳です。

受信トレイはたくさんのトランザクションメールで溢れています。トランザクションメールがあるので受信トレイは空にはなりませんが、それのおかげで、インターネットから情報を得ることができます。

トランザクションメールとは、特定のイベントをトリガーとしてアプリケーション内から送信されるメールのことです。オンラインストアの場合、アカウントのサインアップを完了した時や、購入を完了した時に送信されます。

PHPでメールを送信するのはとても簡単です。ワークフローの任意の部分で mail() 関数を呼び出すだけで、 トランザクション形式のメールを送信することができます。

しかしそのシンプルさが仇になってしまう場合もあります。PHPの開発者にとってmail()関数は、簡単にメール配信機能を実装できて便利ではありますが、大量送信やSPAMフィルターを通過するように配信するには難があります。そのため、Twilio SendGridなどのトランザクションメールを配信するサービスが存在するのです。

今回は、Twilio SendGridを使用してPHPでトランザクションメールを送信する方法をご紹介します。

必要なツール

ご紹介する方法は1つのPHPファイルで構築可能なため、必要な前提条件はあまり多くありません。次のものを用意してください。

Twilio SendGridのアカウント
ComposerがグローバルインストールされたPHPの開発環境

プロジェクトフォルダとファイルを作成する

コンソール画面で以下のコマンドを入力し、プロジェクトフォルダとソースファイルを作成します。

$ mkdir php-sendgrid && cd php-sendgrid
$ touch email.php

Composerプロジェクトをセットアップする

Composerは、PHPで依存関係を管理するためのツールです。Composerを利用することでプロジェクトに必要なライブラリを簡単に宣言することができます。 コンソールウィンドウで、次のコマンドを実行して新しいcomposer.jsonファイルを作成します。

$ touch composer.json

open composer.jsonを実行してIDEで新規作成したファイルを開き、以下の宣言を追記します。

{
   "require": {}
}

composer installを実行してvenderディレクトリを作成します。

Dotenvをインストールする

次に、Twillio SendGridのAPIキーをセキュアに保管するための準備をします。Vance Lucasが提供しているphpdotenv packageを使うと、環境変数を.envファイルからgetenv()$ _ ENV、および$ _SERVERでロードすることが可能になります。次のコマンドを実行してインストールしましょう。

$ composer require vlucas/phpdotenv && touch .env

以下の変数を.envファイルに追記して、APIキーを格納するプレースホルダーを作成しましょう。

SENDGRID_API_KEY=""

Twilio SendGridにサインアップしてAPIキーを作成する

前述のように、トランザクションメールの送信にはTwilio SendGridを使用します。SendGridのアカウントを作成したら、APIキーを生成するためにダッシュボードにアクセスします

Create API Key

「API Key Name」に”PHP Emails”のように名前を入力し、「API Key Permissions」では”Full Access”を選択します。

“Create & View”をクリックし、作成したAPIキーを.envファイルのSENDGRID_API_KEY変数にコピーします。

Twilio SendGrid PHP SDKをインストールする

生成したAPIキーを使ってSendGrid APIにアクセスするには、SendGrid PHP SDKをインストールする必要があります。 次のコマンドを実行しましょう。

$ composer require sendgrid/sendgrid

トランザクションメールを送信するコードを作成する

これでトランザクションメール送信を行うコードを作成する環境が整いました。 次のコードをemail.phpファイルに追加します。

<?php
require 'vendor/autoload.php';
// Load our `.env` variables
$dotenv = Dotenv\Dotenv::create(__DIR__);
$dotenv->load();
// Declare a new SendGrid Mail object
$email = new \SendGrid\Mail\Mail();
// Set the email parameters
$email->setFrom("mbattle@twilio.com", "Marcus Battle");
$email->setSubject("Sending with SendGrid is Fun");
$email->addTo("marcus@marcusbattle.com", "Marcus Battle");
$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'));
// Send the email
try {
   $response = $sendgrid->send($email);
   print $response->statusCode() . "\n";
   print_r($response->headers());
   print $response->body() . "\n";
   echo "email sent!\n";
} catch (Exception $e) {
   echo 'Caught exception: '. $e->getMessage() ."\n";
}

テストする

コンソールウインドで次のコマンドを実行します: php email.php

テストする

まとめ

30行にも満たないコードで、トランザクションメールをスタンドアロンのPHPスクリプトで送信できるなんて驚くべきことです。このロジックを既存のPHPアプリケーションに組み込んでトランザクションメールを送信することも可能です。ぜひお試しください。

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。