Skip to content

Commit c1d8e0d

Browse files
committed
Remove zend mail inheritance
1 parent 0d2f2a6 commit c1d8e0d

File tree

6 files changed

+92
-21
lines changed

6 files changed

+92
-21
lines changed

dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
namespace Magento\Newsletter\Model;
88

9+
use Magento\TestFramework\Mail\Template\TransportBuilderMock;
10+
911
class SubscriberTest extends \PHPUnit_Framework_TestCase
1012
{
1113
/**
@@ -27,13 +29,14 @@ protected function setUp()
2729
public function testEmailConfirmation()
2830
{
2931
$this->_model->subscribe('customer_confirm@example.com');
32+
/** @var TransportBuilderMock $transportBuilder */
3033
$transportBuilder = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
3134
->get(\Magento\TestFramework\Mail\Template\TransportBuilderMock::class);
3235
// confirmationCode 'ysayquyajua23iq29gxwu2eax2qb6gvy' is taken from fixture
3336
$this->assertContains(
3437
'/newsletter/subscriber/confirm/id/' . $this->_model->getSubscriberId()
3538
. '/code/ysayquyajua23iq29gxwu2eax2qb6gvy',
36-
$transportBuilder->getSentMessage()->getBodyHtml()->getRawContent()
39+
$transportBuilder->getSentMessage()->getRawMessage()
3740
);
3841
$this->assertEquals(Subscriber::STATUS_NOT_ACTIVE, $this->_model->getSubscriberStatus());
3942
}

dev/tests/integration/testsuite/Magento/ProductAlert/Model/EmailTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public function testSend($isCustomerIdUsed)
8282
);
8383
$this->assertContains(
8484
'John Smith,',
85-
$transportBuilder->getSentMessage()->getBodyHtml()->getRawContent()
85+
$transportBuilder->getSentMessage()->getRawMessage()
8686
);
8787
}
8888

dev/tests/integration/testsuite/Magento/ProductAlert/Model/ObserverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function testProcess()
5656
);
5757
$this->assertContains(
5858
'John Smith,',
59-
$transportBuilder->getSentMessage()->getBodyHtml()->getRawContent()
59+
$transportBuilder->getSentMessage()->getRawMessage()
6060
);
6161
}
6262
}

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

Lines changed: 68 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,25 @@
1111
use Zend\Mime\Part;
1212

1313
/**
14-
* @todo composition instead of inheritance for better testability
15-
* - add a ZendMailDecorator interface with getZendMail() method for usage in \Magento\Framework\Mail\Transport
1614
* @todo get rid of temporal coupling (setMessageType() + setBody())
17-
* - deprecate setMessageType(), implement a HtmlMessage decorator instead
15+
* - deprecate setMessageType(), setBody() and getBody()
16+
* - implement setBodyHtml(), setBodyText(), getBodyHtml() and getBodyText()
1817
* - change usage in \Magento\Framework\Mail\Template\TransportBuilder::prepareMessage()
1918
*/
20-
class Message extends \Zend\Mail\Message implements MessageInterface
19+
class Message implements MessageInterface
2120
{
21+
/**
22+
* @var \Zend\Mail\Message
23+
*/
24+
private $zendMessage;
2225

2326
/**
24-
* @param string $charset
27+
* @param string $encoding
2528
*/
26-
public function __construct($charset = 'utf-8')
29+
public function __construct($encoding = 'utf-8')
2730
{
28-
$this->encoding = $charset;
31+
$this->zendMessage = new \Zend\Mail\Message;
32+
$this->zendMessage->setEncoding($encoding);
2933
}
3034

3135
/**
@@ -49,24 +53,76 @@ public function setMessageType($type)
4953

5054
/**
5155
* @param null|object|string|\Zend\Mime\Message $body
52-
* @return \Zend\Mail\Message
56+
* @return $this
5357
*/
5458
public function setBody($body)
5559
{
5660
if (is_string($body) && $this->messageType === MessageInterface::TYPE_HTML) {
57-
$body = self::htmlMimeFromString($body);
61+
$body = self::createHtmlMimeFromString($body);
5862
}
59-
return parent::setBody($body);
63+
$this->zendMessage->setBody($body);
64+
return $this;
65+
}
66+
67+
public function setSubject($subject)
68+
{
69+
$this->zendMessage->setSubject($subject);
70+
return $this;
71+
}
72+
73+
public function getSubject()
74+
{
75+
return $this->zendMessage->getSubject();
76+
}
77+
78+
public function getBody()
79+
{
80+
return $this->zendMessage->getBody();
81+
}
82+
83+
public function setFrom($fromAddress)
84+
{
85+
$this->zendMessage->setFrom($fromAddress);
86+
return $this;
87+
}
88+
89+
public function addTo($toAddress)
90+
{
91+
$this->zendMessage->addTo($toAddress);
92+
return $this;
93+
}
94+
95+
public function addCc($ccAddress)
96+
{
97+
$this->zendMessage->addCc($ccAddress);
98+
return $this;
99+
}
100+
101+
public function addBcc($bccAddress)
102+
{
103+
$this->zendMessage->addBcc($bccAddress);
104+
return $this;
105+
}
106+
107+
public function setReplyTo($replyToAddress)
108+
{
109+
$this->zendMessage->setReplyTo($replyToAddress);
110+
return $this;
111+
}
112+
113+
public function getRawMessage()
114+
{
115+
return $this->zendMessage->toString();
60116
}
61117

62118
/**
63119
* @param string $htmlBody
64120
* @return \Zend\Mime\Message
65121
*/
66-
private function htmlMimeFromString($htmlBody)
122+
private function createHtmlMimeFromString($htmlBody)
67123
{
68124
$htmlPart = new Part($htmlBody);
69-
$htmlPart->setCharset($this->getEncoding());
125+
$htmlPart->setCharset($this->zendMessage->getEncoding());
70126
$htmlPart->setType(Mime::TYPE_HTML);
71127
$mimeMessage = new \Zend\Mime\Message();
72128
$mimeMessage->addPart($htmlPart);

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,11 @@ public function setReplyTo($replyToAddress);
9696
* @return $this
9797
*/
9898
public function setMessageType($type);
99+
100+
/**
101+
* Get message source code
102+
*
103+
* @return string
104+
*/
105+
public function getRawMessage();
99106
}

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
*/
77
namespace Magento\Framework\Mail;
88

9+
use Zend\Mail\Message;
10+
use Zend\Mail\Transport\Sendmail;
911

10-
class Transport extends \Zend\Mail\Transport\Sendmail implements \Magento\Framework\Mail\TransportInterface
12+
class Transport implements \Magento\Framework\Mail\TransportInterface
1113
{
14+
/**
15+
* @var Sendmail
16+
*/
17+
private $zendTransport;
1218
/**
1319
* @var \Magento\Framework\Mail\MessageInterface
1420
*/
@@ -21,10 +27,7 @@ class Transport extends \Zend\Mail\Transport\Sendmail implements \Magento\Framew
2127
*/
2228
public function __construct(\Magento\Framework\Mail\MessageInterface $message, $parameters = null)
2329
{
24-
if (!$message instanceof \Zend\Mail\Message) {
25-
throw new \InvalidArgumentException('The message should be an instance of \Zend\Mail\Message');
26-
}
27-
parent::__construct($parameters);
30+
$this->zendTransport = new Sendmail($parameters);
2831
$this->_message = $message;
2932
}
3033

@@ -37,7 +40,9 @@ public function __construct(\Magento\Framework\Mail\MessageInterface $message, $
3740
public function sendMessage()
3841
{
3942
try {
40-
parent::send($this->_message);
43+
$this->zendTransport->send(
44+
Message::fromString($this->_message->getRawMessage())
45+
);
4146
} catch (\Exception $e) {
4247
throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
4348
}

0 commit comments

Comments
 (0)