LoginSignup
4
2

More than 5 years have passed since last update.

SendGrid+PHP(SwiftMailer)+UTF-8でメールを送信する

Last updated at Posted at 2014-11-09

クラウドメールサービスSendGridを使ってPHP(SwiftMailer)からメールを送ってみます。
SendGridを使ってメールを送る方法はいくつかあります。詳しくは公式ブログを参照してください。

  • SMTP
  • Web API
  • マーケティングメール機能

今回はSMTPとX-SMTPAPIを組み合わせて宛先毎に内容の異なるメールを送ってみます。

SMTP

SMTPはWeb APIに比べて細かいメール送信パラメータを指定できるのがメリットですが、それが面倒な場合、デメリットにもなります。今回はUTF-8でメールを送ります。

X-SMTPAPI

名前がSMTPっぽくて紛らわしいですが、X-SMTPAPIはSendGrid独自の拡張ヘッダです。これを利用するとメール送信時にSendGridの様々な機能を使うことができます。今回は、To、Substitution、Sectionを利用してメールの件名や本文内の特定のキー文字列を宛先毎に異なる値に置換してメールを送ってみます。

とりあえず送ってみる

サンプルコードの実行手順はこちら
PHPは5.5.14で動作確認していますが、SwiftMailerが動く程度の適度に古い環境であればたぶん動くと思います。

コード

<?php
require_once 'vendor/autoload.php';

Dotenv::load(__DIR__);
$sendgrid_username = $_ENV['SENDGRID_USERNAME'];
$sendgrid_password = $_ENV['SENDGRID_PASSWORD'];
$tos               = explode(',', $_ENV['TOS']);
$names             = explode(',', $_ENV['NAMES']);
$from              = $_ENV['FROM'];

// create a transport
$transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587, 'tls')
  ->setUsername($sendgrid_username)
  ->setPassword($sendgrid_password);
$mailer = Swift_Mailer::newInstance($transport);

// create a message
$message = Swift_Message::newInstance()
  ->setSubject('こんにちはSendGrid')
  ->setTo($from)
  ->setFrom($from)
  ->setBody(
    "こんにちは、nameさん\r\nようこそ〜テキストメールの世界へ!",
    'text/plain'
  )
  ->addPart(
    "<html>".
    "<body bgcolor=\"#d9edf7\" style=\"background-color: #d9edf7;\">".
    "こんにちは、nameさん<br>ようこそ〜HTMLメールの世界へ!<br>".
    "</body></html>",
    'text/html'
  )
  ->attach(Swift_Attachment::fromPath('./logo.gif'));

// x-smtpapi header
$smtpapi = new Smtpapi\Header();
$smtpapi->setTos($tos);
$smtpapi->addSubstitution('name', $names);
$smtpapi->addCategory('category1');
$headers = $message->getHeaders();
$headers->addTextHeader(
  'x-smtpapi', $smtpapi->jsonString(JSON_UNESCAPED_UNICODE)
);

// send the message
echo $message->toString();
echo $mailer->send($message);
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2