[ ['email' => 'to@adobe.com', 'name' => 'Addressee'] ], 'replyTo' => ['email' => 'replyTo@adobe.com', 'name' => 'Reply To Address'], 'from' => 'from@adobe.com', 'sender' => ['email' => 'sender@adobe.com', 'name' => 'Sender'], 'cc' => [ 'cc1@adobe.com' => 'CC 1 Address', 'cc2@adobe.com' => 'CC 2 Address', 'cc3@adobe.com' => 'CC 3 Address', ], 'bcc' => ['bcc1@adobe.com', 'bcc2@adobe.com'], ]; /** * @var string */ private $subject = 'Test=20subject'; /** * @var string */ private $description = 'Test description'; /** * * @return void */ protected function setUp(): void { $this->di = Bootstrap::getObjectManager(); $this->mimePartFactory = $this->di->get(MimePartInterfaceFactory::class); $this->mimeMessageFactory = $this->di->get(MimeMessageInterfaceFactory::class); $this->messageConverter = $this->di->get(AddressConverter::class); $this->messageFactory = $this->di->get(EmailMessageInterfaceFactory::class); } /** * @return array */ public function getEmailMessageDataProvider(): array { return [ [ 'Content Test', MimeInterface::TYPE_TEXT ], [ '

Html message

', MimeInterface::TYPE_HTML ] ]; } /** * Tests Email Message with Addresses * * @dataProvider getEmailMessageDataProvider * @param $content * @param $type * @return void * @throws MailException */ public function testEmailMessage($content, $type): void { $mimePart = $this->mimePartFactory->create( [ 'content' => $content, 'description' => $this->description, 'type' => $type ] ); $mimeMessage = $this->mimeMessageFactory->create( [ 'parts' => [$mimePart] ] ); $this->addressFactory = $this->di->get(AddressFactory::class); /** @var Address $addressTo */ $to = [ $this->addressFactory->create( [ 'email' => $this->addressList['to'][0]['email'], 'name' => $this->addressList['to'][0]['name'] ] ) ]; $from = [$this->messageConverter->convert($this->addressList['from'])]; $cc = $this->messageConverter->convertMany($this->addressList['cc']); $replyTo = [ $this->messageConverter->convert( $this->addressList['replyTo']['email'], $this->addressList['replyTo']['name'] ) ]; $bcc = $this->messageConverter->convertMany($this->addressList['bcc']); $sender = $this->messageConverter->convert( $this->addressList['sender']['email'], $this->addressList['sender']['name'] ); $data = [ 'body' => $mimeMessage, 'subject' => $this->subject, 'from' => $from, 'to' => $to, 'cc' => $cc, 'replyTo' => $replyTo, 'bcc' => $bcc, 'sender' => $sender, ]; $message = $this->messageFactory->create($data); $this->assertStringContainsString($content, $message->toString()); $this->assertStringContainsString('Content-Type: ' . $type, $message->toString()); $senderString = 'Sender: =?utf-8?Q?' . str_replace(' ', '=20', $sender->getName()) . '?= <' . $sender->getEmail() . '>'; $this->assertStringContainsString($senderString, $message->toString()); $this->assertStringContainsString('From: ' . $from[0]->getEmail(), $message->toString()); $replyToString = 'Reply-To: =?utf-8?Q?' . str_replace(' ', '=20', $replyTo[0]->getName()) . '?= <' . $replyTo[0]->getEmail() . '>'; $this->assertStringContainsString($replyToString, $message->toString()); $toString = 'To: =?utf-8?Q?' . str_replace(' ', '=20', $to[0]->getName()) . '?= <' . $to[0]->getEmail() . '>'; $this->assertStringContainsString($toString, $message->toString()); $ccString = 'Cc: =?utf-8?Q?' . str_replace(' ', '=20', $cc[0]->getName()) . '?= <' . $cc[0]->getEmail() . '>'; $this->assertStringContainsString($ccString, $message->toString()); $this->assertStringContainsString('Bcc: ' . $bcc[0]->getEmail(), $message->toString()); $contentDescription = 'Content-Description: =?UTF-8?Q?' . str_replace(' ', '=20', $this->description) . '?='; $this->assertStringContainsString($contentDescription, $message->toString()); $this->assertStringContainsString( 'Subject: =?UTF-8?Q?' . $this->subject, quoted_printable_decode($message->toString()) ); $this->assertStringContainsString($content, $message->toString()); //tests address factory $this->assertInstanceOf(Address::class, $message->getTo()[0]); //tests address converter convert method $this->assertInstanceOf(Address::class, $message->getFrom()[0]); //tests address converter convertMany method $this->assertInstanceOf(Address::class, $message->getCc()[0]); } /** * Test Email Message with Xml Attachment * * @return void */ public function testEmailMessageWithAttachment(): void { $mimePartMain = $this->mimePartFactory->create( [ 'content' => 'Test', 'description' => $this->description, 'type' => MimeInterface::TYPE_TEXT ] ); $mimePartAttachment = $this->mimePartFactory->create( [ 'content' => $this->getXmlContent(), 'disposition' => MimeInterface::DISPOSITION_ATTACHMENT, 'fileName' => self::ATTACHMENT_FILE_NAME, 'encoding' => MimeInterface::ENCODING_8BIT, 'type' => self::XML_TYPE ] ); $mimeMessage = $this->mimeMessageFactory->create( [ 'parts' => [$mimePartMain, $mimePartAttachment] ] ); $this->addressFactory = $this->di->get(AddressFactory::class); /** @var Address $addressTo */ $addressTo = $this->addressFactory ->create( [ 'email' => $this->addressList['to'][0]['email'], 'name' => $this->addressList['to'][0]['name'] ] ); $data = [ 'body' => $mimeMessage, 'subject' => $this->subject, 'to' => [$addressTo], 'encoding' => '', ]; $message = $this->messageFactory->create($data); $this->assertStringContainsString($this->getXmlContent(), $message->toString()); $this->assertStringContainsString('Content-Type: ' . self::XML_TYPE, $message->toString()); $contentDisposition = 'Content-Disposition: ' . MimeInterface::DISPOSITION_ATTACHMENT . '; filename="' . self::ATTACHMENT_FILE_NAME . '"'; $this->assertStringContainsString($contentDisposition, $message->toString()); } /** * Provides xml content * * @return string */ private function getXmlContent(): string { return ' Furman\Test\Command\Testbed '; } }