diff --git a/NotifierEmailAdapter/Model/AdapterEngine/Email.php b/NotifierEmailAdapter/Model/AdapterEngine/Email.php index d546e625..cecd725b 100755 --- a/NotifierEmailAdapter/Model/AdapterEngine/Email.php +++ b/NotifierEmailAdapter/Model/AdapterEngine/Email.php @@ -9,8 +9,12 @@ namespace Magento\NotifierEmailAdapter\Model\AdapterEngine; use Magento\Framework\Exception\MailException; -use Magento\Framework\Mail\MailMessageInterface; -use Magento\Framework\Mail\MailMessageInterfaceFactory; +use Magento\Framework\Mail\AddressConverter; +use Magento\Framework\Mail\EmailMessageInterfaceFactory; +use Magento\Framework\Mail\MimeInterface; +use Magento\Framework\Mail\MimeMessageInterface; +use Magento\Framework\Mail\MimeMessageInterfaceFactory; +use Magento\Framework\Mail\MimePartInterfaceFactory; use Magento\Framework\Mail\TransportInterfaceFactory; use Magento\NotifierApi\Model\AdapterEngine\AdapterEngineInterface; @@ -37,9 +41,9 @@ class Email implements AdapterEngineInterface private const ADAPTER_TO = 'to'; /** - * @var MailMessageInterfaceFactory + * @var EmailMessageInterfaceFactory */ - private $mailMessageFactory; + private $emailMessageFactory; /** * @var TransportInterfaceFactory @@ -47,16 +51,40 @@ class Email implements AdapterEngineInterface private $transportFactory; /** - * @param MailMessageInterfaceFactory $messageFactory + * @var MimePartInterfaceFactory + */ + private $mimePartInterfaceFactory; + + /** + * @var MimeMessageInterfaceFactory + */ + private $mimeMessageFactory; + + /** + * @var AddressConverter + */ + private $addressConverter; + + /** + * @param EmailMessageInterfaceFactory $emailMessageFactory + * @param MimePartInterfaceFactory $mimePartInterfaceFactory + * @param MimeMessageInterfaceFactory $mimeMessageFactory + * @param AddressConverter $addressConverter * @param TransportInterfaceFactory $transportFactory * @SuppressWarnings(PHPMD.LongVariables) */ public function __construct( - MailMessageInterfaceFactory $messageFactory, + EmailMessageInterfaceFactory $emailMessageFactory, + MimePartInterfaceFactory $mimePartInterfaceFactory, + MimeMessageInterfaceFactory $mimeMessageFactory, + AddressConverter $addressConverter, TransportInterfaceFactory $transportFactory ) { - $this->mailMessageFactory = $messageFactory; + $this->emailMessageFactory = $emailMessageFactory; $this->transportFactory = $transportFactory; + $this->mimePartInterfaceFactory = $mimePartInterfaceFactory; + $this->mimeMessageFactory = $mimeMessageFactory; + $this->addressConverter = $addressConverter; } /** @@ -70,13 +98,16 @@ public function __construct( public function execute(string $message, array $configParams = [], array $params = []): bool { $lines = explode("\n", $message); + $to = preg_split('/\s+/', $configParams[self::ADAPTER_TO]); - /** @var MailMessageInterface $emailMessage */ - $emailMessage = $this->mailMessageFactory->create(); + $emailMessage = $this->emailMessageFactory->create( + [ + 'body' => $this->createMimeMessage($message), + 'to' => $this->addressConverter->convertMany($to), + ] + ); $emailMessage->setFromAddress($configParams[self::ADAPTER_FROM], $configParams[self::ADAPTER_FROM_NAME]); - $emailMessage->addTo($configParams[self::ADAPTER_TO]); - $emailMessage->setBodyText($message); $emailMessage->setSubject($lines[0]); $transport = $this->transportFactory->create(['message' => $emailMessage]); @@ -84,4 +115,26 @@ public function execute(string $message, array $configParams = [], array $params return true; } + + /** + * Create mime message. + * + * @param string $message + * @return MimeMessageInterface + */ + private function createMimeMessage(string $message): MimeMessageInterface + { + $mimePart = $this->mimePartInterfaceFactory->create( + [ + 'content' => $message, + 'type' => MimeInterface::TYPE_TEXT + ] + ); + + return $this->mimeMessageFactory->create( + [ + 'parts' => [$mimePart] + ] + ); + } }