Skip to content

Commit 83e2fb0

Browse files
authored
ENGCOM-5392: [Backport-2.2] Plain Text Emails are now sent with correct MIME Encoding #23537
2 parents 8d1599c + 9e9a279 commit 83e2fb0

File tree

2 files changed

+31
-34
lines changed

2 files changed

+31
-34
lines changed

lib/internal/Magento/Framework/Mail/Message.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Message implements MailMessageInterface
2020
*
2121
* @var string
2222
*/
23-
private $messageType = self::TYPE_TEXT;
23+
private $messageType = Mime::TYPE_TEXT;
2424

2525
/**
2626
* Initialize dependencies.
@@ -55,8 +55,8 @@ public function setMessageType($type)
5555
*/
5656
public function setBody($body)
5757
{
58-
if (is_string($body) && $this->messageType === MailMessageInterface::TYPE_HTML) {
59-
$body = $this->createHtmlMimeFromString($body);
58+
if (is_string($body)) {
59+
$body = $this->createMimeFromString($body, $this->messageType);
6060
}
6161
$this->zendMessage->setBody($body);
6262
return $this;
@@ -158,7 +158,7 @@ public function getRawMessage()
158158
*/
159159
public function setBodyHtml($html)
160160
{
161-
$this->setMessageType(self::TYPE_HTML);
161+
$this->setMessageType(Mime::TYPE_HTML);
162162
return $this->setBody($html);
163163
}
164164

@@ -167,23 +167,24 @@ public function setBodyHtml($html)
167167
*/
168168
public function setBodyText($text)
169169
{
170-
$this->setMessageType(self::TYPE_TEXT);
170+
$this->setMessageType(Mime::TYPE_TEXT);
171171
return $this->setBody($text);
172172
}
173173

174174
/**
175-
* Create HTML mime message from the string.
175+
* Create mime message from the string.
176176
*
177-
* @param string $htmlBody
177+
* @param string $body
178+
* @param string $messageType
178179
* @return \Zend\Mime\Message
179180
*/
180-
private function createHtmlMimeFromString($htmlBody)
181+
private function createMimeFromString($body, $messageType)
181182
{
182-
$htmlPart = new Part($htmlBody);
183-
$htmlPart->setCharset($this->zendMessage->getEncoding());
184-
$htmlPart->setType(Mime::TYPE_HTML);
183+
$part = new Part($body);
184+
$part->setCharset($this->zendMessage->getEncoding());
185+
$part->setType($messageType);
185186
$mimeMessage = new \Zend\Mime\Message();
186-
$mimeMessage->addPart($htmlPart);
187+
$mimeMessage->addPart($part);
187188
return $mimeMessage;
188189
}
189190
}

lib/internal/Magento/Framework/Mail/Test/Unit/MessageTest.php

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,40 @@
55
*/
66
namespace Magento\Framework\Mail\Test\Unit;
77

8+
/**
9+
* test Magento\Framework\Mail\Message
10+
*/
811
class MessageTest extends \PHPUnit\Framework\TestCase
912
{
1013
/**
11-
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Mail\Message
14+
* @var \Magento\Framework\Mail\Message
1215
*/
13-
protected $_messageMock;
16+
protected $message;
1417

1518
protected function setUp()
1619
{
17-
$this->_messageMock = $this->createPartialMock(
18-
\Magento\Framework\Mail\Message::class,
19-
['setBody', 'setMessageType']
20-
);
20+
$this->message = new \Magento\Framework\Mail\Message();
2121
}
2222

2323
public function testSetBodyHtml()
2424
{
25-
$this->_messageMock->expects($this->once())
26-
->method('setMessageType')
27-
->with('text/html');
25+
$this->message->setBodyHtml('body');
2826

29-
$this->_messageMock->expects($this->once())
30-
->method('setBody')
31-
->with('body');
32-
33-
$this->_messageMock->setBodyHtml('body');
27+
$part = $this->message->getBody()->getParts()[0];
28+
$this->assertEquals('text/html', $part->getType());
29+
$this->assertEquals('8bit', $part->getEncoding());
30+
$this->assertEquals('utf-8', $part->getCharset());
31+
$this->assertEquals('body', $part->getContent());
3432
}
3533

3634
public function testSetBodyText()
3735
{
38-
$this->_messageMock->expects($this->once())
39-
->method('setMessageType')
40-
->with('text/plain');
41-
42-
$this->_messageMock->expects($this->once())
43-
->method('setBody')
44-
->with('body');
36+
$this->message->setBodyText('body');
4537

46-
$this->_messageMock->setBodyText('body');
38+
$part = $this->message->getBody()->getParts()[0];
39+
$this->assertEquals('text/plain', $part->getType());
40+
$this->assertEquals('8bit', $part->getEncoding());
41+
$this->assertEquals('utf-8', $part->getCharset());
42+
$this->assertEquals('body', $part->getContent());
4743
}
4844
}

0 commit comments

Comments
 (0)