Skip to content

Instantly share code, notes, and snippets.

@tanakahisateru
Created January 9, 2014 16:57
Show Gist options
  • Save tanakahisateru/8337701 to your computer and use it in GitHub Desktop.
Save tanakahisateru/8337701 to your computer and use it in GitHub Desktop.
How Japanese control Yii2's SwiftMailer
<?php
// Charset
$domesticCharset = 'iso-2022-jp';
$universalCharset = 'utf-8';
// Encoders
$headerEncoderBase64 = new \Swift_Mime_HeaderEncoder_Base64HeaderEncoder();
$contentEncoder7bit = new \Swift_Mime_ContentEncoder_PlainContentEncoder('7bit');
$contentEncoderBase64 = new \Swift_Mime_ContentEncoder_Base64ContentEncoder();
/** @var \yii\swiftmailer\Mailer $mailer */
$mailer = Yii::$app->mail;
// Create an empty message with some headers.
/** @var \yii\swiftmailer\Message $message */
$message = $mailer->compose()
->setSubject($subject)
->setFrom([$fromEmail => $fromName])
->setTo([$toEmail => $toName]);
// # Below are unnecessary settings for multi-part message.
// $message->getSwiftMessage()->setEncoder($encoder7bit);
// $message->setCharset($charset);
// Modify header entries.
$headers = $message->getSwiftMessage()->getHeaders();
foreach (['subject', 'from', 'to'] as $name) {
/** @var \Swift_Mime_Headers_AbstractHeader $header */
$header = $headers->get($name);
$header->setCharset($domesticCharset);
$header->setEncoder($headerEncoderBase64);
}
// Add 1st part as text with 7bit/iso-2022-jp.
$textPart = \Swift_MimePart::newInstance();
$textPart->setCharset($domesticCharset);
$textPart->setEncoder($contentEncoder7bit);
$textPart->setContentType('text/plain');
$textPart->setBody(strip_tags($mailer->render('mailSignupAuthorization', ['request' => $model], $mailer->textLayout)));
$message->getSwiftMessage()->attach($textPart);
// Add 2nd part as HTML with Base64/UTF-8.
$htmlPart = \Swift_MimePart::newInstance();
$htmlPart->setCharset($universalCharset);
$htmlPart->setEncoder($contentEncoderBase64);
$htmlPart->setContentType('text/html');
$htmlPart->setBody($mailer->render('mailSignupAuthorization', ['request' => $model], $mailer->htmlLayout));
$message->getSwiftMessage()->attach($htmlPart);
// Finish!
$message->send();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment