PHPからSendGridを使ってトランザクションメールを送信する方法
- 2020年4月10日
- by SendGrid
- Category: 技術ネタ
この記事は 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キーを生成するためにダッシュボードにアクセスします。
「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アプリケーションに組み込んでトランザクションメールを送信することも可能です。ぜひお試しください。