クラウドメールサービス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);