Ejemplo n.º 1
0
 protected function updateAddressList(AddressList $addressList, $emailOrAddressOrList, $name, $callingMethod)
 {
     if (null === $emailOrAddressOrList) {
         return;
     }
     if ($emailOrAddressOrList instanceof UserInterface) {
         parent::updateAddressList($addressList, $emailOrAddressOrList->getInfo()->getEmail(), $emailOrAddressOrList->getInfo()->getDisplayName(false), $callingMethod);
         return;
     }
     if (is_array($emailOrAddressOrList)) {
         $list = new AddressList();
         foreach ($emailOrAddressOrList as $email => $displayName) {
             if ($displayName instanceof UserInterface) {
                 $info = $displayName->getInfo();
                 $list->add($info->getEmail(), $info->getDisplayName(false));
                 continue;
             }
             if (is_int($email)) {
                 $email = $displayName;
                 $displayName = null;
             }
             $list->add($email, $displayName);
         }
         $emailOrAddressOrList = $list;
     }
     parent::updateAddressList($addressList, $emailOrAddressOrList, $name, $callingMethod);
 }
Ejemplo n.º 2
0
 /**
  * @covers \ZfExtra\Mail\Message::__call
  * @covers \ZfExtra\Mail\Message::setAddresses
  * @covers \ZfExtra\Mail\Message::addAddresses
  * @covers \ZfExtra\Mail\Message::getAddresses
  */
 public function testAddTo()
 {
     $message = new Message();
     $message->setTo('*****@*****.**');
     $this->assertInstanceOf(AddressList::class, $message->getTo());
     $this->assertCount(1, $message->getTo());
     $this->assertEquals('*****@*****.**', $message->getTo()->current()->getEmail());
     $message = new Message();
     $message->addTo('*****@*****.**', 'example');
     $this->assertEquals('*****@*****.**', $message->getTo()->current()->getEmail());
     $this->assertEquals('example', $message->getTo()->current()->getName());
     $message = new Message();
     $message->addTo(array('*****@*****.**', '*****@*****.**'));
     $this->assertCount(2, $message->getTo());
     $this->assertEquals('*****@*****.**', $message->getTo()->current()->getEmail());
     $this->assertEquals('*****@*****.**', $message->getTo()->next()->getEmail());
     $message = new Message();
     $message->addTo(array('*****@*****.**' => 'example', '*****@*****.**'));
     $this->assertCount(2, $message->getTo());
     $this->assertEquals('*****@*****.**', $message->getTo()->current()->getEmail());
     $this->assertEquals('example', $message->getTo()->current()->getName());
     $this->assertEquals('*****@*****.**', $message->getTo()->next()->getEmail());
     $addresses = new AddressList();
     $addresses->add('*****@*****.**');
     $message = new Message();
     $message->addTo($addresses);
     $this->assertEquals('*****@*****.**', $message->getTo()->current()->getEmail());
     $address = new Address('*****@*****.**');
     $message = new Message();
     $message->addTo($address);
     $this->assertEquals('*****@*****.**', $message->getTo()->current()->getEmail());
 }
Ejemplo n.º 3
0
 public function testInvoke()
 {
     $repository = $this->prophesize(RepositoryInterface::class);
     $listener = new LogSending($repository->reveal());
     $event = $this->prophesize(EventInterface::class);
     $message = $this->prophesize(Message::class);
     $event->getParam('message')->willReturn($message->reveal());
     $template = $this->prophesize(Template::class);
     $event->getParam('template')->willReturn($template->reveal());
     $to = new AddressList();
     $to->addFromString('*****@*****.**');
     $message->getTo()->willReturn($to);
     $from = new AddressList();
     $from->addFromString('*****@*****.**');
     $message->getFrom()->willReturn($from);
     $message->getSubject()->willReturn('Some subject');
     $template->getLayoutId()->willReturn(Template::LAYOUT_DEFAULT);
     $template->getId()->willReturn(Template::FEEDBACK_ANSWER);
     $mimeMessage = new MimeMessage();
     $mimeMessage->addPart(new \Zend\Mime\Part('some body'));
     $message->getBody()->willReturn($mimeMessage);
     $event->getParam('data')->willReturn(['data' => 'x']);
     $repository->add(Argument::type(MailLogEntry::class));
     $listener->__invoke($event->reveal());
 }
 public function populateAddressList(AddressList $list)
 {
     $address = new Address('*****@*****.**', 'ZF DevTeam');
     $list->add($address);
     $list->add('*****@*****.**');
     $list->add('*****@*****.**', 'ZF Announce List');
 }
Ejemplo n.º 5
0
 /**
  * 
  * @param array $emails
  * @return AddressList
  */
 private function applyEmails(array $emails)
 {
     $addressList = new AddressList();
     foreach ($emails as $email => $name) {
         if (is_string($email)) {
             $address = new Address($email, $name);
         } else {
             $address = new Address($name);
         }
         $addressList->add($address);
     }
     return $addressList;
 }
 private function headers()
 {
     $headers = new Headers();
     $messageId = new MessageId();
     $messageId->setId('testId');
     $headers->addHeader($messageId);
     $addressList = new AddressList();
     $addressList->add('*****@*****.**');
     $from = new From();
     $from->setAddressList($addressList);
     $headers->addHeader($from);
     $to = new To();
     $to->setAddressList($addressList);
     $headers->addHeader($to);
     return $headers;
 }
Ejemplo n.º 7
0
 public function getOverrideRecipient()
 {
     if (!isset($this->config['develop']['override_recipient']) || '' == trim($this->config['develop']['override_recipient'])) {
         return false;
     }
     $recipientsStr = $this->config['develop']['override_recipient'];
     $recipientsArr = false !== strpos($recipientsStr, ',') ? explode(',', $recipientsStr) : array($recipientsStr);
     $recipientsArr = array_map('trim', $recipientsArr);
     $recipients = new AddressList();
     foreach ($recipientsArr as $recipient) {
         if (preg_match('~^([^<]+)(?:<([^>]+)>)?$~', $recipient, $match)) {
             if (isset($match[2])) {
                 $recipients->add($match[2], $match[1]);
             } else {
                 $recipients->add($match[1]);
             }
         } else {
             trigger_error('invalid address format ("' . $recipient . '") in mails.develop.override_recipient', E_USER_WARNING);
         }
     }
     return $recipients;
 }
Ejemplo n.º 8
0
 /**
  * @testdox recipients gets overidden if override recipients are set
  */
 public function testOverrideRecipient()
 {
     $overrideEmail = 'overidden@email';
     $ccEmail = "cc@email";
     $bccEmail = "bcc@email";
     $toEmail = "to@email";
     $recipients = new AddressList();
     $recipients->add($overrideEmail);
     $this->target->setOverrideRecipient($recipients);
     $mail = new Message();
     $mail->addTo($toEmail);
     $mail->addCc($ccEmail);
     $mail->addBcc($bccEmail);
     $this->expectedMail = $mail;
     $this->target->send($mail);
     $headers = $mail->getHeaders();
     $expectedTo = 'To: ' . $overrideEmail;
     $this->assertFalse($headers->has('cc'));
     $this->assertFalse($headers->has('bcc'));
     $this->assertTrue($headers->has('X-Original-Recipients'));
     $this->assertEquals($expectedTo, $headers->get('to')->toString());
     $this->assertEquals('X-Original-Recipients: To: ' . $toEmail . '; Cc: ' . $ccEmail . '; Bcc: ' . $bccEmail, $headers->get('X-Original-Recipients')->toString());
 }
Ejemplo n.º 9
0
 /**
  * Convert a delimited string to an address list.
  *
  * @param string $input String to convert
  *
  * @return AddressList
  */
 public function stringToAddressList($input)
 {
     // Create recipient list
     $list = new AddressList();
     foreach (preg_split('/[\\s,;]/', $input) as $current) {
         $current = trim($current);
         if (!empty($current)) {
             $list->add($current);
         }
     }
     return $list;
 }
Ejemplo n.º 10
0
 /**
  * @testdox Allows setting an override recipients address list
  */
 public function testSetOverrideRecipients()
 {
     $target = new MailService();
     $expected = new AddressList();
     $expected->add('test@email');
     $target->setOverrideRecipient($expected);
     $this->assertAttributeEquals($expected, 'overrideRecipient', $target);
 }
Ejemplo n.º 11
0
 public function testCanSetReplyToListFromAddressList()
 {
     $list = new AddressList();
     $list->add('*****@*****.**');
     $this->message->addReplyTo('*****@*****.**');
     $this->message->setReplyTo($list);
     $replyTo = $this->message->replyTo();
     $this->assertEquals(1, count($replyTo));
     $this->assertFalse($replyTo->has('*****@*****.**'));
     $this->assertTrue($replyTo->has('*****@*****.**'));
 }
Ejemplo n.º 12
0
 /**
  * Send an email message.
  *
  * @param string|Address|AddressList $to      Recipient email address (or
  * delimited list)
  * @param string|Address             $from    Sender name and email address
  * @param string                     $subject Subject line for message
  * @param string                     $body    Message body
  * @param string                     $cc      CC recipient (null for none)
  *
  * @throws MailException
  * @return void
  */
 public function send($to, $from, $subject, $body, $cc = null)
 {
     if ($to instanceof AddressList) {
         $recipients = $to;
     } else {
         if ($to instanceof Address) {
             $recipients = new AddressList();
             $recipients->add($to);
         } else {
             $recipients = $this->stringToAddressList($to);
         }
     }
     // Validate email addresses:
     if ($this->maxRecipients > 0 && $this->maxRecipients < count($recipients)) {
         throw new MailException('Too Many Email Recipients');
     }
     $validator = new \Zend\Validator\EmailAddress();
     if (count($recipients) == 0) {
         throw new MailException('Invalid Recipient Email Address');
     }
     foreach ($recipients as $current) {
         if (!$validator->isValid($current->getEmail())) {
             throw new MailException('Invalid Recipient Email Address');
         }
     }
     $fromEmail = $from instanceof Address ? $from->getEmail() : $from;
     if (!$validator->isValid($fromEmail)) {
         throw new MailException('Invalid Sender Email Address');
     }
     // Convert all exceptions thrown by mailer into MailException objects:
     try {
         // Send message
         $message = $this->getNewMessage()->addFrom($from)->addTo($recipients)->setBody($body)->setSubject($subject)->setReplyTo($from);
         if ($cc !== null) {
             $message->addCc($cc);
         }
         $this->getTransport()->send($message);
     } catch (\Exception $e) {
         throw new MailException($e->getMessage());
     }
 }
Ejemplo n.º 13
0
 /**
  * Set AddressList type header a value
  *
  * @param string $name
  * @param string $value
  */
 public function setAddressListHeader($name, $value)
 {
     /** @var AbstractAddressList $header */
     $header = $this->getHeader($name);
     $addresslist = new AddressList();
     $addresslist->addFromString($value);
     $header->setAddressList($addresslist);
 }
Ejemplo n.º 14
0
 /**
  * @param       $subject
  * @param       $html
  * @param       $plain
  * @param array $options
  * @param array $receivers
  * @param array $attachments
  *
  * @return Mail\Message
  */
 protected function _assembleMailMessage($subject, $html, $plain, array $options, array $receivers, array $attachments = [])
 {
     $config = $this->_rendererConfig;
     $message = new Mail\Message();
     $message->setEncoding('UTF-8');
     // Sender
     if (isset($options['use_default_sender']) && $options['use_default_sender'] === true) {
         $fromEmail = isset($config['mail_from_email']) ? $config['mail_from_email'] : null;
         $fromName = isset($config['mail_from_name']) ? $config['mail_from_name'] : null;
     } else {
         $fromEmail = isset($options['sender_mail']) ? $options['sender_mail'] : null;
         $fromName = isset($options['sender_name']) ? $options['sender_name'] : null;
     }
     $addressListFrom = new Mail\AddressList();
     $addressListFrom->add(new Mail\Address($fromEmail, isset($fromName) ? $fromName : null));
     $message->setFrom($addressListFrom);
     // Receiver
     $addressListTo = new Mail\AddressList();
     foreach ($receivers as $receiver) {
         $recEmail = isset($config['email_receiver_override']) ? $config['email_receiver_override'] : $receiver[0];
         $recName = isset($receiver[1]) ? $receiver[1] : null;
         $addressListTo->add(new Mail\Address($recEmail, $recName));
     }
     $message->setTo($addressListTo);
     if (isset($config['mail_bcc']) && is_array($config['mail_bcc'])) {
         foreach ($config['mail_bcc'] as $bccAddress) {
             // Avoid sending email copy to "to" AND bcc
             $found = false;
             foreach ($message->getTo() as $to) {
                 if ($to->getEmail() == $bccAddress) {
                     $found = true;
                     break;
                 }
             }
             if (!$found) {
                 $addressListBcc = new Mail\AddressList();
                 $addressListBcc->add(new Mail\Address($bccAddress));
                 $message->addBcc($addressListBcc);
             }
         }
     }
     if (isset($config['subject_prefix']) && $config['subject_prefix'] != '') {
         $subject = $config['subject_prefix'] . $subject;
     }
     $message->setSubject($subject);
     if (empty($attachments)) {
         $message->setBody($html);
         $contentType = Mail\Header\ContentType::fromString('Content-Type: text/html; charset=utf-8');
         $message->getHeaders()->addHeader($contentType);
         $contentTransferEncoding = Mail\Header\ContentTransferEncoding::fromString('Content-Transfer-Encoding: 8bit');
         $message->getHeaders()->addHeader($contentTransferEncoding);
     } else {
         $html = new Mime\Part($html);
         $html->type = Mime\Mime::TYPE_HTML;
         $html->charset = 'UTF-8';
         $html->disposition = Mime\Mime::DISPOSITION_INLINE;
         $html->encoding = Mime\Mime::ENCODING_QUOTEDPRINTABLE;
         $body = new Mime\Message();
         $body->addPart($html);
         foreach ($attachments as $attachmentData) {
             if (isset($attachmentData['file_path']) && is_readable($attachmentData['file_path'])) {
                 $attachmentData['file_data'] = file_get_contents($attachmentData['file_path']);
             }
             if (isset($attachmentData['file_data']) && !empty($attachmentData['file_data'])) {
                 $attachment = new Mime\Part($attachmentData['file_data']);
                 $attachment->type = $attachmentData['mime_type'];
                 $attachment->filename = $attachmentData['name'];
                 $attachment->disposition = Mime\Mime::DISPOSITION_ATTACHMENT;
                 $attachment->encoding = Mime\Mime::ENCODING_BASE64;
                 $body->addPart($attachment);
             }
         }
         $message->setBody($body);
     }
     return $message;
 }
Ejemplo n.º 15
0
 /**
  * Test sending an email using an address list object for the To field.
  *
  * @return void
  */
 public function testSendWithAddressListObjectInRecipient()
 {
     $callback = function ($message) {
         $fromString = $message->getFrom()->current()->toString();
         return 'Recipient TextName <*****@*****.**>' == $message->getTo()->current()->toString() && '<*****@*****.**>' == $message->getFrom()->current()->toString() && 'body' == $message->getBody() && 'subject' == $message->getSubject();
     };
     $transport = $this->getMock('Zend\\Mail\\Transport\\TransportInterface');
     $transport->expects($this->once())->method('send')->with($this->callback($callback));
     $list = new AddressList();
     $list->add(new Address('*****@*****.**', 'Recipient TextName'));
     $mailer = new Mailer($transport);
     $mailer->send($list, '*****@*****.**', 'subject', 'body');
 }
Ejemplo n.º 16
0
 /**
  * Update an address list
  *
  * Proxied to this from addFrom, addTo, addCc, addBcc, and addReplyTo.
  *
  * @param  AddressList $addressList
  * @param  string|Address\AddressInterface|array|AddressList|Traversable $emailOrAddressOrList
  * @param  null|string $name
  * @param  string $callingMethod
  * @throws Exception\InvalidArgumentException
  */
 protected function updateAddressList(AddressList $addressList, $emailOrAddressOrList, $name, $callingMethod)
 {
     if ($emailOrAddressOrList instanceof Traversable) {
         foreach ($emailOrAddressOrList as $address) {
             $addressList->add($address);
         }
         return;
     }
     if (is_array($emailOrAddressOrList)) {
         $addressList->addMany($emailOrAddressOrList);
         return;
     }
     if (!is_string($emailOrAddressOrList) && !$emailOrAddressOrList instanceof Address\AddressInterface) {
         throw new Exception\InvalidArgumentException(sprintf('%s expects a string, AddressInterface, array, AddressList, or Traversable as its first argument; received "%s"', $callingMethod, is_object($emailOrAddressOrList) ? get_class($emailOrAddressOrList) : gettype($emailOrAddressOrList)));
     }
     $addressList->add($emailOrAddressOrList, $name);
 }
 private function headers()
 {
     $headers = new Headers();
     $messageId = new MessageId();
     $messageId->setId('testId');
     $headers->addHeader($messageId);
     $addressList = new AddressList();
     $addressList->add('*****@*****.**', 'Dummy Name');
     $from = new From();
     $from->setAddressList($addressList);
     $headers->addHeader($from);
     $to = new To();
     $to->setAddressList($addressList);
     $headers->addHeader($to);
     //@todo fix this;
     $contentTransferEncoding = new GenericHeader("Content-Transfer-Encoding", "7bit");
     $headers->addHeader($contentTransferEncoding);
     return $headers;
 }