Skip to content

Commit 13b2c41

Browse files
author
Oleksii Korshenko
committed
MAGETWO-67680: Replace Zend_Mail (ZF1) with Zend\Mail (ZF2) #8608
- Introduced new interface MailMessageInterface and deprecated MessageInterface to keep backward compatibility - get rid of temporal coupling (setMessageType() + setBody()) - deprecated setMessageType(), setBody() and getBody() - implemented setBodyHtml(), setBodyText(), getBodyHtml() and getBodyText() - changed usage in \Magento\Framework\Mail\Template\TransportBuilder::prepareMessage()
1 parent 98aebca commit 13b2c41

File tree

4 files changed

+153
-37
lines changed

4 files changed

+153
-37
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Mail;
7+
8+
/**
9+
* Mail Message interface
10+
*
11+
* @api
12+
*/
13+
interface MailMessageInterface extends MessageInterface
14+
{
15+
/**
16+
* @param string $html
17+
* @return $this
18+
*/
19+
public function setBodyHtml($html);
20+
21+
/**
22+
* @param string $text
23+
* @return $this
24+
*/
25+
public function setBodyText($text);
26+
27+
/**
28+
* @return string
29+
*/
30+
public function getBodyText();
31+
32+
/**
33+
* @return string
34+
*/
35+
public function getBodyHtml();
36+
37+
/**
38+
* Get message source code
39+
*
40+
* @return string
41+
*/
42+
public function getRawMessage();
43+
}

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

+75-21
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,20 @@
77
*/
88
namespace Magento\Framework\Mail;
99

10+
use Magento\Framework\Exception\LocalizedException;
1011
use Zend\Mime\Mime;
1112
use Zend\Mime\Part;
1213

1314
/**
14-
* @todo get rid of temporal coupling (setMessageType() + setBody())
15-
* - deprecate setMessageType(), setBody() and getBody()
16-
* - implement setBodyHtml(), setBodyText(), getBodyHtml() and getBodyText()
17-
* - change usage in \Magento\Framework\Mail\Template\TransportBuilder::prepareMessage()
15+
* Class Message.
1816
*/
19-
class Message implements MessageInterface
17+
class Message implements MailMessageInterface
2018
{
2119
/**
2220
* @var \Zend\Mail\Message
2321
*/
2422
private $zendMessage;
2523

26-
/**
27-
* @param string $encoding
28-
*/
29-
public function __construct($encoding = 'utf-8')
30-
{
31-
$this->zendMessage = new \Zend\Mail\Message;
32-
$this->zendMessage->setEncoding($encoding);
33-
}
34-
3524
/**
3625
* Message type
3726
*
@@ -40,10 +29,24 @@ public function __construct($encoding = 'utf-8')
4029
protected $messageType = self::TYPE_TEXT;
4130

4231
/**
43-
* Set message type
32+
* Initialize dependencies.
4433
*
45-
* @param string $type
46-
* @return $this
34+
* @param string $charset
35+
*/
36+
public function __construct($charset = 'utf-8')
37+
{
38+
$this->zendMessage = new \Zend\Mail\Message();
39+
$this->zendMessage->setEncoding($charset);
40+
}
41+
42+
/**
43+
* {@inheritdoc}
44+
*
45+
* @deprecated
46+
* @see \Magento\Framework\Mail\Message::getBodyText
47+
* @see \Magento\Framework\Mail\Message::getBodyHtml
48+
* @see \Magento\Framework\Mail\Message::setBodyText
49+
* @see \Magento\Framework\Mail\Message::setBodyHtml
4750
*/
4851
public function setMessageType($type)
4952
{
@@ -52,12 +55,15 @@ public function setMessageType($type)
5255
}
5356

5457
/**
55-
* @param null|object|string|\Zend\Mime\Message $body
56-
* @return $this
58+
* {@inheritdoc}
59+
*
60+
* @deprecated
61+
* @see \Magento\Framework\Mail\Message::setBodyText
62+
* @see \Magento\Framework\Mail\Message::setBodyHtml
5763
*/
5864
public function setBody($body)
5965
{
60-
if (is_string($body) && $this->messageType === MessageInterface::TYPE_HTML) {
66+
if (is_string($body) && $this->messageType === MailMessageInterface::TYPE_HTML) {
6167
$body = self::createHtmlMimeFromString($body);
6268
}
6369
$this->zendMessage->setBody($body);
@@ -83,7 +89,11 @@ public function getSubject()
8389
}
8490

8591
/**
86-
* @return object
92+
* {@inheritdoc}
93+
*
94+
* @deprecated
95+
* @see \Magento\Framework\Mail\Message::getBodyText
96+
* @see \Magento\Framework\Mail\Message::getBodyHtml
8797
*/
8898
public function getBody()
8999
{
@@ -161,4 +171,48 @@ private function createHtmlMimeFromString($htmlBody)
161171
$mimeMessage->addPart($htmlPart);
162172
return $mimeMessage;
163173
}
174+
175+
/**
176+
* {@inheritdoc}
177+
*/
178+
public function setBodyHtml($html)
179+
{
180+
$this->setMessageType(self::TYPE_HTML);
181+
return $this->setBody($html);
182+
}
183+
184+
/**
185+
* {@inheritdoc}
186+
*/
187+
public function setBodyText($text)
188+
{
189+
$this->setMessageType(self::TYPE_TEXT);
190+
return $this->setBody($text);
191+
}
192+
193+
/**
194+
* {@inheritdoc}
195+
*/
196+
public function getBodyText()
197+
{
198+
if ($this->messageType != self::TYPE_TEXT) {
199+
throw new LocalizedException(
200+
__('Text message body is not set')
201+
);
202+
}
203+
return $this->getBody();
204+
}
205+
206+
/**
207+
* {@inheritdoc}
208+
*/
209+
public function getBodyHtml()
210+
{
211+
if ($this->messageType != self::TYPE_HTML) {
212+
throw new LocalizedException(
213+
__('HTML message body is not set')
214+
);
215+
}
216+
return $this->getBody();
217+
}
164218
}

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

+16-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
* Mail Message interface
1010
*
1111
* @api
12+
* @deprecated
13+
* @see \Magento\Framework\Mail\MailMessageInterface
1214
*/
1315
interface MessageInterface
1416
{
@@ -39,13 +41,21 @@ public function getSubject();
3941
*
4042
* @param mixed $body
4143
* @return $this
44+
*
45+
* @deprecated
46+
* @see \Magento\Framework\Mail\MailMessageInterface::setBodyHtml
47+
* @see \Magento\Framework\Mail\MailMessageInterface::setBodyText()
4248
*/
4349
public function setBody($body);
4450

4551
/**
4652
* Get message body
4753
*
4854
* @return mixed
55+
*
56+
* @deprecated
57+
* @see \Magento\Framework\Mail\MailMessageInterface::getBodyHtml
58+
* @see \Magento\Framework\Mail\MailMessageInterface::getBodyText()
4959
*/
5060
public function getBody();
5161

@@ -94,13 +104,12 @@ public function setReplyTo($replyToAddress);
94104
*
95105
* @param string $type
96106
* @return $this
97-
*/
98-
public function setMessageType($type);
99-
100-
/**
101-
* Get message source code
102107
*
103-
* @return string
108+
* @deprecated
109+
* @see \Magento\Framework\Mail\MailMessageInterface::setBodyHtml
110+
* @see \Magento\Framework\Mail\MailMessageInterface::getBodyHtml
111+
* @see \Magento\Framework\Mail\MailMessageInterface::setBodyText()
112+
* @see \Magento\Framework\Mail\MailMessageInterface::getBodyText()
104113
*/
105-
public function getRawMessage();
114+
public function setMessageType($type);
106115
}

lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php

+19-9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
namespace Magento\Framework\Mail\Template;
1010

1111
use Magento\Framework\App\TemplateTypesInterface;
12+
use Magento\Framework\Exception\LocalizedException;
1213
use Magento\Framework\Mail\MessageInterface;
1314
use Magento\Framework\Mail\TransportInterfaceFactory;
1415
use Magento\Framework\ObjectManagerInterface;
@@ -260,23 +261,32 @@ protected function getTemplate()
260261
}
261262

262263
/**
263-
* Prepare message
264+
* Prepare message.
264265
*
265266
* @return $this
267+
* @throws LocalizedException if template type is unknown
266268
*/
267269
protected function prepareMessage()
268270
{
269271
$template = $this->getTemplate();
270-
$types = [
271-
TemplateTypesInterface::TYPE_TEXT => MessageInterface::TYPE_TEXT,
272-
TemplateTypesInterface::TYPE_HTML => MessageInterface::TYPE_HTML,
273-
];
274-
275272
$body = $template->processTemplate();
276-
$this->message->setMessageType($types[$template->getType()])
277-
->setBody($body)
278-
->setSubject(html_entity_decode($template->getSubject(), ENT_QUOTES));
279273

274+
switch ($template->getType()) {
275+
case MessageInterface::TYPE_TEXT:
276+
$this->message->setBodyText($body);
277+
break;
278+
279+
case MessageInterface::TYPE_HTML:
280+
$this->message->setBodyHtml($body);
281+
break;
282+
283+
default;
284+
throw new LocalizedException(
285+
__('Unknown template type')
286+
);
287+
break;
288+
}
289+
$this->message->setSubject(html_entity_decode($template->getSubject(), ENT_QUOTES));
280290
return $this;
281291
}
282292
}

0 commit comments

Comments
 (0)