public function testCanSetCcListFromAddressList() { $list = new AddressList(); $list->add('*****@*****.**'); $this->message->addCc('*****@*****.**'); $this->message->setCc($list); $cc = $this->message->getCc(); $this->assertEquals(1, count($cc)); $this->assertFalse($cc->has('*****@*****.**')); $this->assertTrue($cc->has('*****@*****.**')); }
/** * {@inheritDoc} * @link http://help.postageapp.com/kb/api/send_message * @return array The id and UID of the sent message (if sent correctly) */ public function send(Message $message) { $from = $message->getFrom(); if (count($from) !== 1) { throw new Exception\RuntimeException('Postage API requires exactly one from sender'); } if (count($message->getCc())) { throw new Exception\RuntimeException('Postage does not support CC addresses'); } if (count($message->getBcc())) { throw new Exception\RuntimeException('Postage does not support BCC addresses'); } $parameters = array('uid' => sha1(json_encode(uniqid())), 'arguments' => array('headers' => array('subject' => $message->getSubject(), 'from' => $from->rewind()->toString()), 'content' => array('text/plain' => $this->extractText($message), 'text/html' => $this->extractHtml($message)))); $to = array(); foreach ($message->getTo() as $address) { $to[] = $address->toString(); } $parameters['arguments']['recipients'] = implode(',', $to); $replyTo = $message->getReplyTo(); if (count($replyTo) > 1) { throw new Exception\RuntimeException('Postage has only support for one Reply-To address'); } elseif (count($replyTo)) { $parameters['headers']['reply-to'] = $replyTo->rewind()->toString(); } if ($message instanceof PostageMessage) { if ($message->getTemplate() !== '') { $parameters['arguments']['template'] = $message->getTemplate(); $parameters['arguments']['variables'] = $message->getVariables(); } } $attachments = $this->extractAttachments($message); foreach ($attachments as $attachment) { $parameters['arguments']['attachments'][$attachment->filename] = array('content_type' => $attachment->type, 'content' => base64_encode($attachment->getRawContent())); } $response = $this->prepareHttpClient('/send_message.json', $parameters)->send(); $data = $this->parseResponse($response); return array('uid' => $parameters['uid'], 'id' => $data['message']['id']); }
/** * Prepare array of email address recipients * * @param Message $message * @return array */ protected function prepareRecipients(Message $message) { $recipients = array(); foreach ($message->getTo() as $address) { $recipients[] = $address->getEmail(); } foreach ($message->getCc() as $address) { $recipients[] = $address->getEmail(); } foreach ($message->getBcc() as $address) { $recipients[] = $address->getEmail(); } $recipients = array_unique($recipients); return $recipients; }
/** * Prepare array of email address recipients * * @param Message $message * @return array */ protected function prepareRecipients(Message $message) { if ($this->getEnvelope() && $this->getEnvelope()->getTo()) { return (array) $this->getEnvelope()->getTo(); } $recipients = []; foreach ($message->getTo() as $address) { $recipients[] = $address->getEmail(); } foreach ($message->getCc() as $address) { $recipients[] = $address->getEmail(); } foreach ($message->getBcc() as $address) { $recipients[] = $address->getEmail(); } $recipients = array_unique($recipients); return $recipients; }
/** * {@inheritDoc} * @link http://sendgrid.com/docs/API_Reference/Web_API/mail.html * @return mixed */ public function send(Message $message) { $from = $message->getFrom(); if (count($from) !== 1) { throw new Exception\RuntimeException('SendGrid API requires exactly one from sender'); } if (count($message->getCc())) { throw new Exception\RuntimeException('SendGrid does not support CC addresses'); } $parameters = array('from' => $from->rewind()->getEmail(), 'fromname' => $from->rewind()->getName(), 'subject' => $message->getSubject(), 'text' => $this->extractText($message), 'html' => $this->extractHtml($message)); foreach ($message->getTo() as $address) { $parameters['to'][] = $address->getEmail(); } foreach ($message->getBcc() as $address) { $parameters['bcc'][] = $address->getEmail(); } $replyTo = $message->getReplyTo(); if (count($replyTo) > 1) { throw new Exception\RuntimeException('SendGrid has only support for one Reply-To address'); } elseif (count($replyTo)) { $parameters['replyto'] = $replyTo->rewind()->getEmail(); } $client = $this->prepareHttpClient('/mail.send.json'); // Set Parameters as POST, since prepareHttpClient() put only GET parameters $client->setParameterPost($parameters); // Eventually add files. This cannot be done before prepareHttpClient call because prepareHttpClient // reset all parameters (response, request...), therefore we would loose the file upload $post = $client->getRequest()->getPost(); $attachments = $this->extractAttachments($message); foreach ($attachments as $attachment) { $post->set('files[' . $attachment->filename . ']', $attachment->getRawContent()); } $response = $client->setMethod(HttpRequest::METHOD_POST)->setEncType(HttpClient::ENC_FORMDATA)->send(); return $this->parseResponse($response); }
/** * Create `Mandrill message` from `ZF message`. * * @param ZendMessage $zfMessage * * @return Message */ public static function convertZFMail(ZendMessage $zfMessage) { $mandrillMessage = new self(); // GET HTML MIME PART $messageHtmlPart = $messageTextPart = null; $mimeParts = $zfMessage->getBody()->getParts(); foreach ($mimeParts as $mimePart) { switch ($mimePart->getType()) { case ZendMime::TYPE_HTML: $messageHtmlPart = $mimePart->getContent(); break; case ZendMime::TYPE_TEXT: $messageTextPart = $mimePart->getContent(); break; } } // text part if ($messageTextPart !== null) { $mandrillMessage->text = $messageTextPart; } // html part if ($messageHtmlPart !== null) { $mandrillMessage->html = $messageHtmlPart; } // subject if ($zfMessage->getSubject() !== null) { $mandrillMessage->subject = $zfMessage->getSubject(); } // from if ($zfMessage->getFrom()->count()) { $mandrillMessage->from_email = $zfMessage->getFrom()->current()->getEmail(); $mandrillMessage->from_name = $zfMessage->getFrom()->current()->getName(); } // reply-to if ($zfMessage->getReplyTo()->count()) { $mandrillMessage->headers = ['Reply-To' => $zfMessage->getReplyTo()->current()->getEmail()]; } // to if ($zfMessage->getTo()->count()) { foreach ($zfMessage->getTo() as $to) { $mandrillMessage->addRecipient(new Recipient($to->getEmail(), null, Recipient::RECIPIENT_TYPE_TO)); } } // cc if ($zfMessage->getCc()->count()) { foreach ($zfMessage->getCc() as $cc) { $mandrillMessage->addRecipient(new Recipient($cc->getEmail(), null, Recipient::RECIPIENT_TYPE_CC)); } } // bcc if ($zfMessage->getBcc()->count()) { foreach ($zfMessage->getBcc() as $bcc) { $mandrillMessage->addRecipient(new Recipient($bcc->getEmail(), null, Recipient::RECIPIENT_TYPE_BCC)); } } return $mandrillMessage; }
/** * Prepares list of all mail recipients * * @param Message $message * @return array */ private function prepareAddressList(Message $message) { $addressList = array(); foreach ($message->getTo() as $address) { $addressList[] = $address->getEmail(); } foreach ($message->getCc() as $address) { $addressList[] = $address->getEmail(); } foreach ($message->getBcc() as $address) { $addressList[] = $address->getEmail(); } return $addressList; }