public static function copy(PostmanEmailAddress $orig) { return new PostmanEmailAddress($orig->getEmail(), $orig->getName()); }
/** * * @param unknown $recipients * Array or comma-separated list of email addresses to send message. * @throws Exception */ private function addRecipients(&$recipientList, $recipients) { if (!empty($recipients)) { $recipients = PostmanEmailAddress::convertToArray($recipients); foreach ($recipients as $recipient) { if (!empty($recipient)) { $this->logger->debug(sprintf('User added recipient: "%s"', $recipient)); array_push($recipientList, new PostmanEmailAddress($recipient)); } } } }
/** * (non-PHPdoc) * * @see PostmanSmtpEngine::send() */ public function send(PostmanMessage $message) { $this->logger->debug("Prepping Zend"); $envelopeFrom = new PostmanEmailAddress($this->transport->getEnvelopeFromEmailAddress()); if ($this->transport->isEnvelopeFromValidationSupported()) { // validate the envelope from since we didn't do it in the Message $envelopeFrom->validate('Envelope From'); } // create the Message $charset = $message->getCharset(); $this->logger->debug('Building Postman_Zend_Mail with charset=' . $charset); $mail = new Postman_Zend_Mail($charset); // add the Postman signature - append it to whatever the user may have set if (!PostmanOptions::getInstance()->isStealthModeEnabled()) { $pluginData = apply_filters('postman_get_plugin_metadata', null); $mail->addHeader('X-Mailer', sprintf('Postman SMTP %s for WordPress (%s)', $pluginData['version'], 'https://wordpress.org/plugins/postman-smtp/')); } // add the headers - see http://framework.zend.com/manual/1.12/en/zend.mail.additional-headers.html foreach ((array) $message->getHeaders() as $header) { $this->logger->debug(sprintf('Adding user header %s=%s', $header['name'], $header['content'])); $mail->addHeader($header['name'], $header['content'], true); } // if the caller set a Content-Type header, use it $contentType = $message->getContentType(); if (!empty($contentType)) { $mail->addHeader('Content-Type', $contentType, false); $this->logger->debug('Adding content-type ' . $contentType); } // add the From Header $fromHeader = $this->addFrom($message, $mail); $fromHeader->log($this->logger, 'From'); // add the Sender Header, overriding what the user may have set $mail->addHeader('Sender', $this->transport->getFromEmailAddress(), false); // from RFC 5321: http://tools.ietf.org/html/rfc5321#section-4.4 // A message-originating SMTP system SHOULD NOT send a message that // already contains a Return-path header field. // I changed Zend/Mail/Mail.php to fix this $mail->setReturnPath($this->transport->getEnvelopeFromEmailAddress()); // add the to recipients foreach ((array) $message->getToRecipients() as $recipient) { $recipient->log($this->logger, 'To'); $mail->addTo($recipient->getEmail(), $recipient->getName()); } // add the cc recipients foreach ((array) $message->getCcRecipients() as $recipient) { $recipient->log($this->logger, 'Cc'); $mail->addCc($recipient->getEmail(), $recipient->getName()); } // add the to recipients foreach ((array) $message->getBccRecipients() as $recipient) { $recipient->log($this->logger, 'Bcc'); $mail->addBcc($recipient->getEmail(), $recipient->getName()); } // add the reply-to $replyTo = $message->getReplyTo(); // $replyTo is null or a PostmanEmailAddress object if (isset($replyTo)) { $mail->setReplyTo($replyTo->getEmail(), $replyTo->getName()); } // add the date $date = $message->getDate(); if (!empty($date)) { $mail->setDate($date); } // add the messageId $messageId = $message->getMessageId(); if (!empty($messageId)) { $mail->setMessageId($messageId); } // add the subject if (null !== $message->getSubject()) { $mail->setSubject($message->getSubject()); } $textPart = $message->getBodyTextPart(); if (!empty($textPart)) { $this->logger->debug('Adding body as text'); $mail->setBodyText($textPart); } $htmlPart = $message->getBodyHtmlPart(); if (!empty($htmlPart)) { $this->logger->debug('Adding body as html'); $mail->setBodyHtml($htmlPart); } // add attachments $this->logger->debug("Adding attachments"); $message->addAttachmentsToMail($mail); // create the SMTP transport $this->logger->debug("Create the Zend_Mail transport"); $zendTransport = $this->transport->createZendMailTransport($this->transport->getHostname(), array()); try { // send the message $this->logger->debug("Sending mail"); $mail->send($zendTransport); if ($this->logger->isInfo()) { $this->logger->info(sprintf('Message %d accepted for delivery', PostmanState::getInstance()->getSuccessfulDeliveries() + 1)); } // finally not supported?? if ($zendTransport->getConnection() && !PostmanUtils::isEmpty($zendTransport->getConnection()->getLog())) { $this->transcript = $zendTransport->getConnection()->getLog(); } else { if (method_exists($zendTransport, 'getTranscript') && !PostmanUtils::isEmpty($zendTransport->getTranscript())) { // then use the API response $this->transcript = $zendTransport->getTranscript(); } else { if (method_exists($zendTransport, 'getMessage') && !PostmanUtils::isEmpty($zendTransport->getMessage())) { // then use the Raw Message as the Transcript $this->transcript = $zendTransport->getMessage(); } } } } catch (Exception $e) { // finally not supported?? if ($zendTransport->getConnection() && !PostmanUtils::isEmpty($zendTransport->getConnection()->getLog())) { $this->transcript = $zendTransport->getConnection()->getLog(); } else { if (method_exists($zendTransport, 'getTranscript') && !PostmanUtils::isEmpty($zendTransport->getTranscript())) { // then use the API response $this->transcript = $zendTransport->getTranscript(); } else { if (method_exists($zendTransport, 'getMessage') && !PostmanUtils::isEmpty($zendTransport->getMessage())) { // then use the Raw Message as the Transcript $this->transcript = $zendTransport->getMessage(); } } } // get the current exception message $message = $e->getMessage(); if ($e->getCode() == 334) { // replace the unusable Google message with a better one in the case of code 334 $message = sprintf(__('Communication Error [334] - make sure the Envelope From email is the same account used to create the Client ID.', Postman::TEXT_DOMAIN)); } // create a new exception $newException = new Exception($message, $e->getCode()); // throw the new exception after handling throw $newException; } }
<?php require_once 'Postman/Postman-Mail/PostmanEmailAddress.php'; require_once 'Postman/PostmanUtils.php'; // string test $recipients = 'Kevin.Brine@pppg.com, Robert <*****@*****.**>, "Warbler" <*****@*****.**>, "Guice, Doug" <*****@*****.**>'; var_dump(PostmanEmailAddress::convertToArray($recipients)); // array test $recipients = array('*****@*****.**', 'Robert <*****@*****.**>', '"Warbler" <*****@*****.**>', '"Guice, Doug" <*****@*****.**>'); var_dump(PostmanEmailAddress::convertToArray($recipients)); // array test $recipients = '*****@*****.**'; var_dump(PostmanEmailAddress::convertToArray($recipients));