PHP から SendGrid 電子メール サービスを使用する方法How to Use the SendGrid Email Service from PHP

このガイドでは、Azure の SendGrid 電子メール サービスを使用して一般的なプログラム タスクを実行する方法を紹介します。This guide demonstrates how to perform common programming tasks with the SendGrid email service on Azure. サンプルは PHP で記述されています。The samples are written in PHP. 紹介するシナリオは、電子メールの作成電子メールの送信、および添付ファイルの追加です。The scenarios covered include constructing email, sending email, and adding attachments. SendGrid と電子メールの送信の詳細については、「 次のステップ 」を参照してください。For more information on SendGrid and sending email, see the Next Steps section.

SendGrid 電子メール サービスとはWhat is the SendGrid Email Service?

SendGrid は、信頼性の高いトランザクション メール配信、拡張性、およびリアルタイム分析の機能を備えたクラウドベースの電子メール サービスであり、柔軟な API を備えているためカスタム統合も容易です。SendGrid is a cloud-based email service that provides reliable transactional email delivery, scalability, and real-time analytics along with flexible APIs that make custom integration easy. SendGrid の一般的な使用シナリオを次に示します。Common SendGrid usage scenarios include:

  • 顧客に受信通知を自動送信するAutomatically sending receipts to customers
  • 顧客に広告メールを月 1 回送信するための配布リストを管理するAdministering distribution lists for sending customers monthly e-fliers and special offers
  • ブロックされた電子メールや顧客の応答性などを表す測定値をリアルタイムで収集するCollecting real-time metrics for things like blocked e-mail, and customer responsiveness
  • 傾向を認識するために役立つレポートを生成するGenerating reports to help identify trends
  • 顧客の問い合わせを転送するForwarding customer inquiries
  • アプリケーションからの電子メール通知Email notifications from your application

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

SendGrid アカウントの作成Create a SendGrid Account

Azure ユーザーは 1 か月あたり 25,000 通の電子メールを無料で利用できます。Azure customers can unlock 25,000 free emails each month. 毎月 25,000 通の無料電子メールにより、高度なレポートおよび分析と すべての API (Web、SMTP、イベント、解析など) を利用できるようになります。These 25,000 free monthly emails will give you access to advanced reporting and analytics and all APIs (Web, SMTP, Event, Parse and more). SendGrid の提供するその他のサービスについては、SendGrid のソリューションに関するページにアクセスしてください。For information about additional services provided by SendGrid, visit the SendGrid Solutions page.

SendGrid アカウントにサインアップするにはTo sign up for a SendGrid account

  1. Azure Portal にログインします。Log in to the Azure portal.
  2. 左側のメニューで、[リソースの作成] をクリックします。In the menu on the left, click Create a resource.

    command-bar-new

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

    sendgrid-store

  4. サインアップ フォームに入力し、[作成] を選択します。Complete the signup form and select Create.

    sendgrid-create

  5. Azure 設定で SendGrid サービスを特定する名前を入力します。Enter a Name to identify your SendGrid service in your Azure settings. 名前は 1 ~ 100 文字にする必要があります。また、名前に含めることができるのは英数字、ダッシュ、ピリオド、およびアンダースコアのみです。Names must be between 1 and 100 characters in length and contain only alphanumeric characters, dashes, dots, and underscores. この名前は、Azure ストアのサブスクライブ項目の一覧で一意になっている必要があります。The name must be unique in your list of subscribed Azure Store Items.
  6. パスワードを入力し、確認します。Enter and confirm your Password.
  7. サブスクリプションを選択します。Choose your Subscription.
  8. 新しいリソース グループを作成するか、既存のリソース グループを使用します。Create a new Resource group or use an existing one.
  9. [価格レベル] セクションで、サインアップする SendGrid プランを選択します。In the Pricing tier section select the SendGrid plan you want to sign up for.

    sendgrid-pricing

  10. 所有している場合は、プロモーション コードを入力します。Enter a Promotion Code if you have one.
  11. 連絡先情報を入力します。Enter your Contact Information.
  12. 法律条項を確認し、同意します。Review and accept the Legal terms.
  13. 購入を確認すると、[デプロイメントに成功しました] ポップアップが表示され、[すべてのリソース] セクションにアカウントが表示されます。After confirming your purchase you will see a Deployment Succeeded pop-up and you will see your account listed in the All resources section.

    all-resources

    購入を完了して [管理] をクリックし、電子メール検証プロセスが始まると、SendGrid からアカウントの確認を求める電子メールが届きます。After you have completed your purchase and clicked the Manage button to initiate the email verification process, you will receive an email from SendGrid asking you to verify your account. この電子メールを受信していない場合やアカウントの検証に問題がある場合は、この FAQ を参照してください。If you do not receive this email, or have problems verifying your account, please see this FAQ.

    manage

    アカウントが確認されるまでは、1 日に送信できる電子メールの数は最大 100 件です。You can only send up to 100 emails/day until you have verified your account.

    サブスクリプション プランを変更するか、SendGrid 連絡先設定を表示するには、SendGrid サービスの名前をクリックし、SendGrid Marketplace ダッシュボードを開きます。To modify your subscription plan or see the SendGrid contact settings, click the name of your SendGrid service to open the SendGrid Marketplace dashboard.

    設定

    SendGrid を使用して電子メールを送信するには、API キーを指定する必要があります。To send an email using SendGrid, you must supply your API Key.

SendGrid API キーを確認するにはTo find your SendGrid API Key

  1. Manage をクリックします。Click Manage.

    manage

  2. SendGrid のダッシュボードの左側のメニューで、[設定][API キー] の順に選択します。In your SendGrid dashboard, select Settings and then API Keys in the menu on the left.

    api-keys

  3. [API キーの作成] をクリックします。Click the Create API Key.

    general-api-key

  4. 少なくとも、このキーの名前を指定して電子メールの送信のフル アクセスを提供し、[保存] を選択します。At a minimum, provide the Name of this key and provide full access to Mail Send and select Save.

    access

  5. この時点で API が 1 回表示されます。Your API will be displayed at this point one time. 必ず安全に保管してください。Please be sure to store it safely.

SendGrid の資格情報を確認するにはTo find your SendGrid credentials

  1. キー アイコンをクリックして、自分のユーザー名を検索します。Click the key icon to find your Username.

    key

  2. パスワードは、セットアップ時に選択したものです。The password is the one you chose at setup. 変更するには、[パスワードの変更] または [パスワードのリセット] を選択します。You can select Change password or Reset password to make any changes.

電子メール配信を管理するには、管理 ボタンをクリックします。To manage your email deliverability settings, click the Manage button. これで、SendGrid のダッシュボードにリダイレクトされます。This will redirect to your SendGrid dashboard.

manage

SendGrid 経由での電子メールの送信の詳細については、電子メール API の概要に関するページを参照してください。For more information on sending email through SendGrid, visit the Email API Overview.

PHP アプリケーションからの SendGrid の使用Using SendGrid from your PHP Application

Azure PHP アプリケーションで SendGrid を使用するために、特別な構成やコーディングは不要です。Using SendGrid in an Azure PHP application requires no special configuration or coding. SendGrid はサービスであるため、オンプレミスのアプリケーションからとまったく同じ方法で、クラウド アプリケーションからアクセスできます。Because SendGrid is a service, it can be accessed in exactly the same way from a cloud application as it can from an on-premises application.

方法: 電子メールを送信するHow to: Send an Email

SMTP、または SendGrid の Web API を使用して電子メールを送信できます。You can send email using either SMTP or the Web API provided by SendGrid.

SMTP APISMTP API

SendGrid SMTP API を使用して電子メールを送信するには、Swift Mailer を使用します。Swift Mailer は、PHP アプリケーションから電子メールを送信するためのコンポーネントベースのライブラリです。To send email using the SendGrid SMTP API, use Swift Mailer, a component-based library for sending emails from PHP applications. Swift Mailer ライブラリは、http://swiftmailer.org/download v5.3.0 からダウンロードできます (Swift Mailer をインストールするには、Composer を使用します)。You can download the Swift Mailer library from http://swiftmailer.org/download v5.3.0 (use Composer to install Swift Mailer). このライブラリを使用して電子メールを送信するには、Swift_SmtpTransportSwift_Mailer、および Swift_Message クラスのインスタンスを作成し、適切なプロパティを設定して、Swift_Mailer::send メソッドを呼び出します。Sending email with the library involves creating instances of the Swift_SmtpTransport, Swift_Mailer, and Swift_Message classes, setting the appropriate properties, and calling the Swift_Mailer::send method.

<?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 APIWeb API

PHP の curl 関数で SendGrid Web API を使用して電子メールを送信します。Use PHP's curl function to send email using the 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 の両方の動詞を区別しないで使用できるためです。SendGrid's Web API is very similar to a REST API, though it is not truly a RESTful API since, in most calls, both GET and POST verbs can be used interchangeably.

方法: 添付ファイルを追加するHow to: Add an Attachment

SMTP APISMTP API

SMTP API を使用して添付ファイルを送信するには、この例のスクリプトに、Swift Mailer を使用して電子メールを送信するコード行を追加する必要があります。Sending an attachment using the SMTP API involves one additional line of code to the example script for sending an email with 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);
 }

追加するコード行は次のとおりです。The additional line of code is as follows:

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

このコード行では、Swift_Message オブジェクトの attach メソッドを呼び出し、Swift_Attachment クラスの静的メソッド fromPath を使用してファイルを取得してメッセージに添付しています。This line of code calls the attach method on the Swift_Message object and uses static method fromPath on the Swift_Attachment class to get and attach a file to a message.

Web APIWeb API

Web API を使用した添付ファイルの送信は、Web API を使用した電子メールの送信と非常によく似ています。Sending an attachment using the Web API is very similar to sending an email using the Web API. ただし次の例では、パラメーターの配列に次の要素を格納する必要があることに注意してください。However, note that in the example that follows, the parameter array must contain this element:

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

例:Example:

<?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);

方法: フィルターを使用してフッター、追跡、および分析を有効にするHow to: Use Filters to Enable Footers, Tracking, and Analytics

SendGrid では、'フィルター' を使用することでその他の電子メール機能も利用することができます。SendGrid provides additional email functionality through the use of 'filters'. その設定を電子メール メッセージに追加することで、クリック追跡、Google 分析、サブスクリプション追跡などの独自の機能を有効にすることができます。These are settings that can be added to an email message to enable specific functionality such as enabling click tracking, Google analytics, subscription tracking, and so on.

フィルターは、フィルターのプロパティを使用してメッセージに適用できます。Filters can be applied to a message by using the filters property. 各フィルターは、フィルター固有の設定を格納したハッシュで指定します。Each filter is specified by a hash containing filter-specific settings. 次の例では、フッター フィルターを有効にし、電子メール メッセージの下部に追加されるテキスト メッセージを指定しています。The following example enables the footer filter and specifies a text message that will be appended to the bottom of the email message. この例では、 sendgrid-phpライブラリを使用します。For this example we will use sendgrid-php library. ライブラリをインストールするには、 Composer を使用します。Use Composer to install library:

php composer.phar require sendgrid/sendgrid 2.1.1

例:Example:

<?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);

次のステップNext Steps

これで、SendGrid 電子メール サービスの基本を学習できました。さらに詳細な情報が必要な場合は、次のリンク先を参照してください。Now that you've learned the basics of the SendGrid Email service, follow these links to learn more.

詳細については、 PHP デベロッパー センターも参照してください。For more information, see also the PHP Developer Center.