From 232a223c1771c358ff314c66abf663355aa9efd0 Mon Sep 17 00:00:00 2001 From: Paul Klimov Date: Wed, 8 Jan 2014 13:45:48 +0200 Subject: [PATCH] SwiftMailer message updated to setup charset for alternative body correctly. --- extensions/yii/swiftmailer/Message.php | 8 +++++--- tests/unit/extensions/swiftmailer/MessageTest.php | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/extensions/yii/swiftmailer/Message.php b/extensions/yii/swiftmailer/Message.php index 9558d58..7269671 100644 --- a/extensions/yii/swiftmailer/Message.php +++ b/extensions/yii/swiftmailer/Message.php @@ -188,6 +188,7 @@ class Message extends BaseMessage { $message = $this->getSwiftMessage(); $oldBody = $message->getBody(); + $charset = $message->getCharset(); if (empty($oldBody)) { $parts = $message->getChildren(); $partFound = false; @@ -195,6 +196,7 @@ class Message extends BaseMessage if (!($part instanceof \Swift_Mime_Attachment)) { /* @var \Swift_Mime_MimePart $part */ if ($part->getContentType() == $contentType) { + $charset = $part->getCharset(); unset($parts[$key]); $partFound = true; break; @@ -204,7 +206,7 @@ class Message extends BaseMessage if ($partFound) { reset($parts); $message->setChildren($parts); - $message->addPart($body, $contentType); + $message->addPart($body, $contentType, $charset); } else { $message->setBody($body, $contentType); } @@ -215,8 +217,8 @@ class Message extends BaseMessage } else { $message->setBody(null); $message->setContentType(null); - $message->addPart($oldBody, $oldContentType); - $message->addPart($body, $contentType); + $message->addPart($oldBody, $oldContentType, $charset); + $message->addPart($body, $contentType, $charset); } } } diff --git a/tests/unit/extensions/swiftmailer/MessageTest.php b/tests/unit/extensions/swiftmailer/MessageTest.php index 31ec727..b095cf0 100644 --- a/tests/unit/extensions/swiftmailer/MessageTest.php +++ b/tests/unit/extensions/swiftmailer/MessageTest.php @@ -341,4 +341,23 @@ class MessageTest extends VendorTestCase $unserializedMessaage = unserialize($serializedMessage); $this->assertEquals($message, $unserializedMessaage, 'Unable to unserialize message!'); } + + /** + * @depends testSendAlternativeBody + */ + public function testAlternativeBodyCharset() + { + $message = $this->createTestMessage(); + $charset = 'windows-1251'; + $message->setCharset($charset); + + $message->setTextBody('some text'); + $message->setHtmlBody('some html'); + $content = $message->toString(); + $this->assertEquals(2, substr_count($content, $charset), 'Wrong charset for alternative body.'); + + $message->setTextBody('some text override'); + $content = $message->toString(); + $this->assertEquals(2, substr_count($content, $charset), 'Wrong charset for alternative body override.'); + } }