PHP から SendGrid 電子メール サービスを使用する方法

このガイドでは、Azure の SendGrid 電子メール サービスを使用して一般的なプログラム タスクを実行する方法を紹介します。 サンプルは PHP で記述されています。 紹介するシナリオは、電子メールの作成電子メールの送信、および添付ファイルの追加です。 SendGrid と電子メールの送信の詳細については、「 次のステップ 」を参照してください。

SendGrid 電子メール サービスとは

SendGrid は、信頼性の高いトランザクション メール配信、拡張性、およびリアルタイム分析の機能を備えたクラウドベースの電子メール サービスであり、柔軟な API を備えているためカスタム統合も容易です。 SendGrid の一般的な使用シナリオを次に示します。

  • 顧客に受信通知を自動送信する
  • 顧客に広告メールを月&1; 回送信するための配布リストを管理する
  • ブロックされた電子メールや顧客の応答性などを表す測定値をリアルタイムで収集する
  • 傾向を認識するために役立つレポートを生成する
  • 顧客の問い合わせを転送する
  • アプリケーションからの電子メール通知

詳細については、https://sendgrid.com を参照してください。

SendGrid アカウントの作成

Azure ユーザーは 1 か月あたり 25,000 通の電子メールを無料で利用できます。 毎月 25,000 通の無料電子メールにより、高度なレポートおよび分析と すべての API (Web、SMTP、イベント、解析など) を利用できるようになります。 SendGrid の提供するその他のサービスについては、SendGrid のソリューションに関するページにアクセスしてください。

SendGrid アカウントにサインアップするには

  1. Azure 管理ポータルにログインします。
  2. 左側のメニューで [新規] をクリックします。

    command-bar-new

  3. [アドオン][SendGrid Email Delivery (SendGrid 電子メール配信)] の順にクリックします。

    sendgrid-store

  4. サインアップ フォームに入力し、[作成] を選択します。

    sendgrid-create

  5. Azure 設定で SendGrid サービスを特定する名前を入力します。 名前は 1 ~ 100 文字にする必要があります。また、名前に含めることができるのは英数字、ダッシュ、ピリオド、およびアンダースコアのみです。 この名前は、Azure ストアのサブスクライブ項目の一覧で一意になっている必要があります。
  6. パスワードを入力し、確認します。
  7. サブスクリプションを選択します。
  8. 新しいリソース グループを作成するか、既存のリソース グループを使用します。
  9. [価格レベル] セクションで、サインアップする SendGrid プランを選択します。

    sendgrid-pricing

  10. 所有している場合は、プロモーション コードを入力します。
  11. 連絡先情報を入力します。
  12. 法律条項を確認し、同意します。
  13. 購入を確認すると、[デプロイメントに成功しました] ポップアップが表示され、[すべてのリソース] セクションにアカウントが表示されます。

    all-resources

    購入を完了して [管理] をクリックし、電子メール検証プロセスが始まると、SendGrid からアカウントの確認を求める電子メールが届きます。 この電子メールを受信していない場合やアカウントの検証に問題がある場合は、この FAQ を参照してください。

    manage

    アカウントが確認されるまでは、1 日に送信できる電子メールの数は最大 100 件です。

    サブスクリプション プランを変更するか、SendGrid 連絡先設定を表示するには、SendGrid サービスの名前をクリックし、SendGrid Marketplace ダッシュボードを開きます。

    [設定]

    SendGrid を使用して電子メールを送信するには、API キーを指定する必要があります。

SendGrid API キーを確認するには

  1. [管理]をクリックします。

    manage

  2. SendGrid のダッシュボードの左側のメニューで、[設定][API キー] の順に選択します。

    api-keys

  3. [API キーの作成] ドロップダウンをクリックして、[General API Key (一般的な API キー)] を選択します。

    general-api-key

  4. 少なくとも、このキーの名前を指定して電子メールの送信のフル アクセスを提供し、[保存] を選択します。

    access

  5. この時点で API が 1 回表示されます。 必ず安全に保管してください。

SendGrid の資格情報を確認するには

  1. キー アイコンをクリックして、自分のユーザー名を検索します。

    key

  2. パスワードは、セットアップ時に選択したものです。 変更するには、[パスワードの変更] または [パスワードのリセット] を選択します。

電子メール配信を管理するには、[管理] ボタンをクリックします。 これで、SendGrid のダッシュボードにリダイレクトされます。

![manage][manage]

For more information on sending email through SendGrid, visit the [Email API Overview][Email API Overview].

PHP アプリケーションからの SendGrid の使用

Azure PHP アプリケーションで SendGrid を使用するために、特別な構成やコーディングは不要です。 SendGrid はサービスであるため、オンプレミスのアプリケーションからとまったく同じ方法で、クラウド アプリケーションからアクセスできます。

方法: 電子メールを送信する

SMTP、または SendGrid の Web API を使用して電子メールを送信できます。

SMTP API

SendGrid SMTP API を使用して電子メールを送信するには、Swift Mailer を使用します。Swift Mailer は、PHP アプリケーションから電子メールを送信するためのコンポーネントベースのライブラリです。 Swift Mailer ライブラリは、http://swiftmailer.org/download v5.3.0 からダウンロードできます (Swift Mailer をインストールするには、Composer を使用します)。 このライブラリを使用して電子メールを送信するには、Swift_SmtpTransportSwift_Mailer、および Swift_Message クラスのインスタンスを作成し、適切なプロパティを設定して、Swift_Mailer::send メソッドを呼び出します。

<?php
 include_once "vendor/autoload.php";
 /*
  * Create the body of the message (a plain-text and an HTML version).
  * $text is your plain-text email
  * $html is your html version of the email
  * If the receiver is able to view html emails then only the html
  * email will be displayed
  */
 $text = "Hi!\nHow are you?\n";
 $html = "<html>
       <head></head>
       <body>
           <p>Hi!<br>
               How are you?<br>
           </p>
       </body>
       </html>";
 // This is your From email address
 $from = array('someone@example.com' => 'Name To Appear');
 // Email recipients
 $to = array(
       'john@contoso.com'=>'Destination 1 Name',
       'anna@contoso.com'=>'Destination 2 Name'
 );
 // Email subject
 $subject = 'Example PHP Email';

 // Login credentials
 $username = 'yoursendgridusername';
 $password = 'yourpassword';

 // Setup Swift mailer parameters
 $transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587);
 $transport->setUsername($username);
 $transport->setPassword($password);
 $swift = Swift_Mailer::newInstance($transport);

 // Create a message (subject)
 $message = new Swift_Message($subject);

 // attach the body of the email
 $message->setFrom($from);
 $message->setBody($html, 'text/html');
 $message->setTo($to);
 $message->addPart($text, 'text/plain');

 // send message
 if ($recipients = $swift->send($message, $failures))
 {
     // This will let us know how many users received this message
     echo 'Message sent out to '.$recipients.' users';
 }
 // something went wrong =(
 else
 {
     echo "Something went wrong - ";
     print_r($failures);
 }

Web API

PHP の curl 関数で SendGrid Web API を使用して電子メールを送信します。

<?php

 $url = 'https://api.sendgrid.com/';
 $user = 'USERNAME';
 $pass = 'PASSWORD';

 $params = array(
      'api_user' => $user,
      'api_key' => $pass,
      'to' => 'john@contoso.com',
      'subject' => 'testing from curl',
      'html' => 'testing body',
      'text' => 'testing body',
      'from' => 'anna@contoso.com',
   );

 $request = $url.'api/mail.send.json';

 // Generate curl request
 $session = curl_init($request);

 // Tell curl to use HTTP POST
 curl_setopt ($session, CURLOPT_POST, true);

 // Tell curl that this is the body of the POST
 curl_setopt ($session, CURLOPT_POSTFIELDS, $params);

 // Tell curl not to return headers, but do return the response
 curl_setopt($session, CURLOPT_HEADER, false);
 curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

 // obtain response
 $response = curl_exec($session);
 curl_close($session);

 // print everything out
 print_r($response);

SendGrid の Web API は REST API とほとんど同じですが、実際は REST ベースの API ではありません。ほとんどの呼び出しで GET と POST の両方の動詞を区別しないで使用できるためです。

方法: 添付ファイルを追加する

SMTP API

SMTP API を使用して添付ファイルを送信するには、この例のスクリプトに、Swift Mailer を使用して電子メールを送信するコード行を追加する必要があります。

<?php
 include_once "vendor/autoload.php";
 /*
  * Create the body of the message (a plain-text and an HTML version).
  * $text is your plain-text email
  * $html is your html version of the email
  * If the reciever is able to view html emails then only the html
  * email will be displayed
  */
 $text = "Hi!\nHow are you?\n";
  $html = "<html>
      <head></head>
      <body>
         <p>Hi!<br>
            How are you?<br>
         </p>
      </body>
      </html>";

 // This is your From email address
 $from = array('someone@example.com' => 'Name To Appear');

 // Email recipients
 $to = array(
      'john@contoso.com'=>'Destination 1 Name',
      'anna@contoso.com'=>'Destination 2 Name'
 );
 // Email subject
 $subject = 'Example PHP Email';

 // Login credentials
 $username = 'yoursendgridusername';
 $password = 'yourpassword';

 // Setup Swift mailer parameters
 $transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587);
 $transport->setUsername($username);
 $transport->setPassword($password);
 $swift = Swift_Mailer::newInstance($transport);

 // Create a message (subject)
 $message = new Swift_Message($subject);

 // attach the body of the email
 $message->setFrom($from);
 $message->setBody($html, 'text/html');
 $message->setTo($to);
 $message->addPart($text, 'text/plain');
 $message->attach(Swift_Attachment::fromPath("path\to\file")->setFileName("file_name"));

 // send message
 if ($recipients = $swift->send($message, $failures))
 {
      // This will let us know how many users received this message
      echo 'Message sent out to '.$recipients.' users';
 }
 // something went wrong =(
 else
 {
      echo "Something went wrong - ";
      print_r($failures);
 }

追加するコード行は次のとおりです。

 $message->attach(Swift_Attachment::fromPath("path\to\file")->setFileName('file_name'));

このコード行では、Swift_Message オブジェクトの attach メソッドを呼び出し、Swift_Attachment クラスの静的メソッド fromPath を使用してファイルを取得してメッセージに添付しています。

Web API

Web API を使用した添付ファイルの送信は、Web API を使用した電子メールの送信と非常によく似ています。 ただし次の例では、パラメーターの配列に次の要素を格納する必要があることに注意してください。

'files['.$fileName.']' => '@'.$filePath.'/'.$fileName

例:

<?php

 $url = 'https://api.sendgrid.com/';
 $user = 'USERNAME';
 $pass = 'PASSWORD';

 $fileName = 'myfile';
 $filePath = dirname(__FILE__);

 $params = array(
     'api_user' => $user,
     'api_key' => $pass,
     'to' =>'john@contoso.com',
     'subject' => 'test of file sends',
     'html' => '<p> the HTML </p>',
     'text' => 'the plain text',
     'from' => 'anna@contoso.com',
     'files['.$fileName.']' => '@'.$filePath.'/'.$fileName
 );

 print_r($params);

 $request = $url.'api/mail.send.json';

 // Generate curl request
 $session = curl_init($request);

 // Tell curl to use HTTP POST
 curl_setopt ($session, CURLOPT_POST, true);

 // Tell curl that this is the body of the POST
 curl_setopt ($session, CURLOPT_POSTFIELDS, $params);

 // Tell curl not to return headers, but do return the response
 curl_setopt($session, CURLOPT_HEADER, false);
 curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

 // obtain response
 $response = curl_exec($session);
 curl_close($session);

 // print everything out
 print_r($response);

方法: フィルターを使用してフッター、追跡、および分析を有効にする

SendGrid では、'フィルター' を使用することでその他の電子メール機能も利用することができます。 その設定を電子メール メッセージに追加することで、クリック追跡、Google 分析、サブスクリプション追跡などの独自の機能を有効にすることができます。

フィルターは、フィルターのプロパティを使用してメッセージに適用できます。 各フィルターは、フィルター固有の設定を格納したハッシュで指定します。 次の例では、フッター フィルターを有効にし、電子メール メッセージの下部に追加されるテキスト メッセージを指定しています。 この例では、 sendgrid-phpライブラリを使用します。 ライブラリをインストールするには、 Composer を使用します。

php composer.phar require sendgrid/sendgrid 2.1.1

例:

<?php
 /*
  * This example is used for sendgrid-php V2.1.1 (https://github.com/sendgrid/sendgrid-php/tree/v2.1.1)
  */
 include "vendor/autoload.php";

 $email = new SendGrid\Email();
 // The list of addresses this message will be sent to
 // [This list is used for sending multiple emails using just ONE request to SendGrid]
 $toList = array('john@contoso.com', 'anna@contoso.com');

 // Specify the names of the recipients
 $nameList = array('Name 1', 'Name 2');

 // Used as an example of variable substitution
 $timeList = array('4 PM', '5 PM');

 // Set all of the above variables
 $email->setTos($toList);
 $email->addSubstitution('-name-', $nameList);
 $email->addSubstitution('-time-', $timeList);

 // Specify that this is an initial contact message
 $email->addCategory("initial");

 // You can optionally setup individual filters here, in this example, we have
 // enabled the footer filter
 $email->addFilter('footer', 'enable', 1);
 $email->addFilter('footer', "text/plain", "Thank you for your business");
 $email->addFilter('footer', "text/html", "Thank you for your business");

 // The subject of your email
 $subject = 'Example SendGrid Email';

 // Where is this message coming from. For example, this message can be from
 // support@yourcompany.com, info@yourcompany.com
 $from = 'someone@example.com';

 // If you do not specify a sender list above, you can specifiy the user here. If
 // a sender list IS specified above, this email address becomes irrelevant.
 $to = 'john@contoso.com';

 # Create the body of the message (a plain-text and an HTML version).
 # text is your plain-text email
 # html is your html version of the email
 # if the receiver is able to view html emails then only the html
 # email will be displayed

 /*
  * Note the variable substitution here =)
  */
 $text = "
 Hello -name-,
 Thank you for your interest in our products. We have set up an appointment to call you at -time- EST to discuss your needs in more detail.
 Regards,
 Fred";

 $html = "
 <html>
 <head></head>
 <body>
 <p>Hello -name-,<br>
 Thank you for your interest in our products. We have set up an appointment
 to call you at -time- EST to discuss your needs in more detail.

 Regards,

 Fred<br>
 </p>
 </body>
 </html>";

 // set subject
 $email->setSubject($subject);

 // attach the body of the email
 $email->setFrom($from);
 $email->setHtml($html);
 $email->addTo($to);
 $email->setText($text);

 // Your SendGrid account credentials
 $username = 'sendgridusername@yourdomain.com';
 $password = 'example';

 // Create SendGrid object
 $sendgrid = new SendGrid($username, $password);

 // send message
 $response = $sendgrid->send($email);

 print_r($response);

次のステップ

これで、SendGrid 電子メール サービスの基本を学習できました。さらに詳細な情報が必要な場合は、次のリンク先を参照してください。

詳細については、 PHP デベロッパー センターも参照してください。