public function populateAddressList(AddressList $list) { $address = new Address('*****@*****.**', 'ZF DevTeam'); $list->add($address); $list->add('*****@*****.**'); $list->add('*****@*****.**', 'ZF Announce List'); }
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); }
/** * @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()); }
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; }
/** * * @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; }
/** * 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); }
/** * @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()); }
/** * 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; }
/** * @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); }
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('*****@*****.**')); }
/** * 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'); }
/** * 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()); } }
/** * @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; }
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; }