1. RFCに従わないキャリアメールにメールを送れるように
デフォルトだと、foo..bar@docomo のように . が連続したり foo.@docomo のように . で終わるユーザー名だとエラーになり送れません。
それを回避する方法
参考
https://teratail.com/questions/28363
2. エンコードを iso-2022-jp にする
デフォルトだとutf-8になりますが、どうしてもiso-2022-jp でないと受け取れないクライアント向けに iso-2022-jp にエンコードする方法
参考
http://uzulla.hateblo.jp/entry/2015/03/20/235252
サンプル
別途 Sample/Email/LooseMimeGrammar.php を作成しておく。
<?php
use Sample\Email\LooseMimeGrammar;
\Swift::init(
function () {
// 日本語に関する初期設定 (ISO 2022)
\Swift_DependencyContainer::getInstance()
->register('mime.qpheaderencoder')
->asAliasOf('mime.base64headerencoder');
\Swift_Preferences::getInstance()->setCharset('iso-2022-jp');
// RFC違反のアドレスにメール送る設定
// @link https://teratail.com/questions/28363
\Swift_DependencyContainer::getInstance()
->register('mime.grammar')
->asSharedInstanceOf(LooseMimeGrammar::class);
}
);
// SMTP サーバーとの接続設定
/** @var \Swift_SmtpTransport $transport */
$transport = \Swift_SmtpTransport::newInstance($host, $port);
/** @var \Swift_Mailer $mailer */
$mailer = \Swift_Mailer::newInstance($transport);
// メールの作成
/** @var \Swift_Message $message */
$message = \Swift_Message::newInstance()
->setCharset('iso-2022-jp')
->setEncoder(\Swift_Encoding::get7BitEncoding())
->setSubject($subject)
->setFrom($from)
->setTo($to)
->setBody($body);
// 送信
$result = $mailer->send($message);