예제 #1
0
 /**
  * Creates a Log object for use by writeToEmailLog()
  *
  * @param PostmanMessage $message        	
  * @param unknown $transcript        	
  * @param unknown $statusMessage        	
  * @param unknown $success        	
  * @param PostmanModuleTransport $transport        	
  * @return PostmanEmailLog
  */
 private function createLog(PostmanEmailLog $log, PostmanMessage $message = null, $transcript, $statusMessage, $success, PostmanModuleTransport $transport)
 {
     if ($message) {
         $log->sender = $message->getFromAddress()->format();
         $log->toRecipients = $this->flattenEmails($message->getToRecipients());
         $log->ccRecipients = $this->flattenEmails($message->getCcRecipients());
         $log->bccRecipients = $this->flattenEmails($message->getBccRecipients());
         $log->subject = $message->getSubject();
         $log->body = $message->getBody();
         if (null !== $message->getReplyTo()) {
             $log->replyTo = $message->getReplyTo()->format();
         }
     }
     $log->success = $success;
     $log->statusMessage = $statusMessage;
     $log->transportUri = PostmanTransportRegistry::getInstance()->getPublicTransportUri($transport);
     $log->sessionTranscript = $log->transportUri . "\n\n" . $transcript;
     return $log;
 }
 /**
  * (non-PHPdoc)
  *
  * @see PostmanSmtpEngine::send()
  */
 public function send(PostmanMessage $message)
 {
     $options = PostmanOptions::getInstance();
     // add the Postman signature - append it to whatever the user may have set
     if (!$options->isStealthModeEnabled()) {
         $pluginData = apply_filters('postman_get_plugin_metadata', null);
         $this->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']));
         $this->addHeader($header['name'], $header['content'], true);
     }
     // if the caller set a Content-Type header, use it
     $contentType = $message->getContentType();
     if (!empty($contentType)) {
         $this->logger->debug('Adding content-type ' . $contentType);
         $this->addHeader('Content-Type', $contentType);
     }
     // add the From Header
     $sender = $message->getFromAddress();
     $senderEmail = $sender->getEmail();
     $senderName = $sender->getName();
     assert(!empty($senderEmail));
     $this->mandrillMessage['from_email'] = $senderEmail;
     if (!empty($senderName)) {
         $this->mandrillMessage['from_name'] = $senderName;
     }
     // now log it
     $sender->log($this->logger, 'From');
     // add the Sender Header, overriding what the user may have set
     $this->addHeader('Sender', $options->getEnvelopeSender());
     // add the to recipients
     foreach ((array) $message->getToRecipients() as $recipient) {
         $recipient->log($this->logger, 'To');
         $recipient = array('email' => $recipient->getEmail(), 'name' => $recipient->getName(), 'type' => 'to');
         array_push($this->mandrillMessage['to'], $recipient);
     }
     // add the cc recipients
     foreach ((array) $message->getCcRecipients() as $recipient) {
         $recipient->log($this->logger, 'Cc');
         $recipient = array('email' => $recipient->getEmail(), 'name' => $recipient->getName(), 'type' => 'cc');
         array_push($this->mandrillMessage['to'], $recipient);
     }
     // add the bcc recipients
     foreach ((array) $message->getBccRecipients() as $recipient) {
         $recipient->log($this->logger, 'Bcc');
         $recipient = array('email' => $recipient->getEmail(), 'name' => $recipient->getName(), 'type' => 'bcc');
         array_push($this->mandrillMessage['to'], $recipient);
     }
     // add the reply-to
     $replyTo = $message->getReplyTo();
     // $replyTo is null or a PostmanEmailAddress object
     if (isset($replyTo)) {
         $this->addHeader('reply-to', $replyTo->format());
     }
     // add the date
     $date = $message->getDate();
     if (!empty($date)) {
         $this->addHeader('date', $message->getDate());
     }
     // add the messageId
     $messageId = $message->getMessageId();
     if (!empty($messageId)) {
         $this->addHeader('message-id', $messageId);
     }
     // add the subject
     if (null !== $message->getSubject()) {
         $this->mandrillMessage['subject'] = $message->getSubject();
     }
     $textPart = $message->getBodyTextPart();
     if (!empty($textPart)) {
         $this->logger->debug('Adding body as text');
         $this->mandrillMessage['text'] = $textPart;
     }
     $htmlPart = $message->getBodyHtmlPart();
     if (!empty($htmlPart)) {
         $this->logger->debug('Adding body as html');
         $this->mandrillMessage['html'] = $htmlPart;
     }
     // add attachments
     $this->logger->debug("Adding attachments");
     $this->addAttachmentsToMail($message);
     $result = array();
     try {
         if ($this->logger->isDebug()) {
             $this->logger->debug("Creating Mandrill service with apiKey=" . $this->apiKey);
         }
         $mandrill = new Postman_Mandrill($this->apiKey);
         // send the message
         if ($this->logger->isDebug()) {
             $this->logger->debug("Sending mail");
         }
         $result = $mandrill->messages->send($this->mandrillMessage);
         if ($this->logger->isInfo()) {
             $this->logger->info(sprintf('Message %d accepted for delivery', PostmanState::getInstance()->getSuccessfulDeliveries() + 1));
         }
         $this->transcript = print_r($result, true);
         $this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS;
         $this->transcript .= print_r($this->mandrillMessage, true);
     } catch (Exception $e) {
         $this->transcript = $e->getMessage();
         $this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS;
         $this->transcript .= print_r($this->mandrillMessage, true);
         throw $e;
     }
 }