Автор: Chris Corbyn
Наследование: extends Swift_Mime_MimeEntity
Пример #1
0
 public function send(\Swift_Mime_Message $message, &$failedRecipients = null)
 {
     if (in_array('*****@*****.**', array_keys($message->getTo()))) {
         return 0;
     }
     return 1;
 }
Пример #2
0
 /**
  * {@inheritDoc}
  */
 protected function preSend(\Swift_Mime_Message $message)
 {
     if (!$message instanceof TemplateMailInterface) {
         throw new \RuntimeException('The message must implement the interface Template');
     }
     $message->setParametersFromMailer($this->getParameters());
     $this->generateMessageContent($message);
 }
Пример #3
0
 public function send(Swift_Mime_Message $message, &$failedRecipients = null)
 {
     if (!$message->getFrom()) {
         if ($from = self::getDefaultFrom()) {
             $message->setFrom($from);
         }
     }
     if ($this->wa_set_transport) {
         $this->_transport = self::getTransportByEmail(key($message->getFrom()));
     }
     return parent::send($message, $failedRecipients);
 }
Пример #4
0
 public function send(\Swift_Mime_Message $message, &$failedRecipients = null)
 {
     if (!empty(\GO::config()->disable_mail)) {
         throw new \Exception("E-mail sending is disabled!");
     }
     if (\GO::config()->debug) {
         $getTo = $message->getTo();
         if (!empty($getTo)) {
             $getTo = implode(",", array_keys($getTo));
         } else {
             $getTo = '';
         }
         \GO::debug("Sending e-mail to " . $getTo);
     }
     if (\GO::modules()->isInstalled("log")) {
         $str = "";
         $from = $message->getFrom();
         if (!empty($from)) {
             $str .= implode(",", array_keys($from));
         } else {
             $str .= "unknown";
         }
         $str .= " -> ";
         $to = $message->getTo();
         if (!empty($to)) {
             $str .= implode(",", array_keys($to));
         }
         $to = $message->getCc();
         if (!empty($to)) {
             $str .= implode(",", array_keys($to));
         }
         $to = $message->getBcc();
         if (!empty($to)) {
             $str .= implode(",", array_keys($to));
         }
         \GO\Log\Model\Log::create("email", $str);
     }
     //		debug_print_backtrace();
     //		exit("NO MAIL");
     //workaround https://github.com/swiftmailer/swiftmailer/issues/335
     $messageId = $message->getId();
     $count = parent::send($message, $failedRecipients);
     $message->setId($messageId);
     // Check if a tmp dir is created to store attachments.
     // If so, then remove the tmp dir if the mail is send successfully.
     $tmpDir = $message->getTmpDir();
     if (!empty($tmpDir)) {
         $folder = new \GO\Base\Fs\Folder($tmpDir);
         // Check if folder is deleted successfully
         if ($folder->delete()) {
             \GO::debug('Clear attachments tmp directory: ' . $tmpDir);
         } else {
             \GO::debug('Failed to clear attachments tmp directory: ' . $tmpDir);
         }
     }
     return $count;
 }
Пример #5
0
 /**
  * Gets MIME parts that match the message type.
  * Excludes parts of type \Swift_Mime_Attachment as those
  * are handled later.
  *
  * @param  Swift_Mime_Message  $message
  * @param  string              $mimeType
  * @return Swift_Mime_MimePart
  */
 private function getMIMEPart(\Swift_Mime_Message $message, $mimeType)
 {
     foreach ($message->getChildren() as $part) {
         if (strpos($part->getContentType(), $mimeType) === 0 && !$part instanceof \Swift_Mime_Attachment) {
             return $part;
         }
     }
 }
Пример #6
0
 private function _restoreMessage(Swift_Mime_Message $message)
 {
     // restore original headers
     $headers = $message->getHeaders();
     if ($headers->has('X-Swift-To')) {
         $message->setTo($headers->get('X-Swift-To')->getNameAddresses());
         $headers->removeAll('X-Swift-To');
     }
     if ($headers->has('X-Swift-Cc')) {
         $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses());
         $headers->removeAll('X-Swift-Cc');
     }
     if ($headers->has('X-Swift-Bcc')) {
         $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses());
         $headers->removeAll('X-Swift-Bcc');
     }
 }
Пример #7
0
 /**
  * @param Swift_Mime_Message $message
  * @param array|null         $failedRecipients
  * @param Exception|null     $exception
  */
 protected function _logSendError(Swift_Mime_Message $message, array $failedRecipients = null, Exception $exception = null)
 {
     $context = new CM_Log_Context();
     $context->setExtra(['message' => ['subject' => $message->getSubject(), 'from' => $message->getFrom(), 'to' => $message->getTo(), 'cc' => $message->getCc(), 'bcc' => $message->getBcc()], 'failedRecipients' => $failedRecipients]);
     if ($exception) {
         $context->setException($exception);
     }
     $this->getServiceManager()->getLogger()->error('Failed to send email', $context);
 }
Пример #8
0
 /**
  * Save the complete message to the filesystem for testing and debugging
  *
  * @param Swift_Mime_Message $message the email message to log
  * @throws CException if the file system is not writeable
  */
 protected function saveToFile(Swift_Mime_Message $message)
 {
     if (!$this->logDirectory) {
         $this->logDirectory = Yii::app()->getRuntimePath() . DIRECTORY_SEPARATOR . "email";
     }
     if (($logPath = realpath($this->logDirectory)) === false || !is_dir($logPath) || !is_writable($logPath)) {
         mkdir($this->logDirectory, 0777, true);
     }
     $fileName = 'SwiftMailer_' . $_SERVER['REQUEST_TIME'] . '_' . mt_rand() . '.tmp';
     $file = $this->logDirectory . DIRECTORY_SEPARATOR . $fileName;
     if (!is_writable(dirname($file))) {
         throw new CException('Email log directory "' . dirname($file) . '" does not exist or is not writable');
     }
     if (!file_put_contents($file, quoted_printable_decode($message->toString()))) {
         throw new CException('Unable to log mail');
     }
 }
Пример #9
0
 /**
  * Prepare and attach the given attachment.
  *
  * @param \Swift_Attachment $attachment
  * @param array             $options
  *
  * @return $this
  */
 protected function prepAttachment(Swift_Attachment $attachment, array $options = []) : MessageContract
 {
     // First we will check for a MIME type on the message, which instructs the
     // mail client on what type of attachment the file is so that it may be
     // downloaded correctly by the user. The MIME option is not required.
     if (isset($options['mime'])) {
         $attachment->setContentType($options['mime']);
     }
     // If an alternative name was given as an option, we will set that on this
     // attachment so that it will be downloaded with the desired names from
     // the developer, otherwise the default file names will get assigned.
     if (isset($options['as'])) {
         $attachment->setFilename($options['as']);
     }
     $this->swift->attach($attachment);
     return $this;
 }
Пример #10
0
 /**
  * Set the body of this entity, either as a string, or array of view 
  * variables if a view is set, or as an instance of 
  * {@link Swift_OutputByteStream}.
  * 
  * @param mixed the body of the message.  If a $this->view is set and this 
  * is a string, this is passed to the view as $body.  If $this->view is set 
  * and this is an array, the array values are passed to the view like in the 
  * controller render() method
  * @param string content type optional. For html, set to 'html/text'
  * @param string charset optional
  */
 public function setBody($body = '', $contentType = null, $charset = null)
 {
     if ($this->view !== null) {
         if (!is_array($body)) {
             $body = array('body' => $body);
         }
         // if Yii::app()->controller doesn't exist create a dummy
         // controller to render the view (needed in the console app)
         if (isset(Yii::app()->controller)) {
             $controller = Yii::app()->controller;
         } else {
             $controller = new CController('YiiMail');
         }
         // renderPartial won't work with CConsoleApplication, so use
         // renderInternal - this requires that we use an actual path to the
         // view rather than the usual alias
         $viewPath = Yii::getPathOfAlias($this->view) . '.php';
         $body = $controller->renderInternal($viewPath, array_merge($body, array('mail' => $this)), true);
     }
     return $this->message->setBody($body, $contentType, $charset);
 }
Пример #11
0
 /** Restore a changed message back to its original state */
 private function restoreMessage(Swift_Mime_Message $message)
 {
     if ($this->lastMessage === $message) {
         if (isset($this->originalBody)) {
             $message->setBody($this->originalBody);
             $this->originalBody = null;
         }
         if (!empty($this->originalHeaders)) {
             foreach ($message->getHeaders()->getAll() as $header) {
                 if (array_key_exists($header->getFieldName(), $this->originalHeaders)) {
                     $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]);
                 }
             }
             $this->originalHeaders = array();
         }
         if (!empty($this->originalChildBodies)) {
             $children = (array) $message->getChildren();
             foreach ($children as $child) {
                 $id = $child->getId();
                 if (array_key_exists($id, $this->originalChildBodies)) {
                     $child->setBody($this->originalChildBodies[$id]);
                 }
             }
             $this->originalChildBodies = array();
         }
         $this->lastMessage = null;
     }
 }
Пример #12
0
 /**
  * Generate a human readable HTML comment with message info.
  *
  * @return string
  */
 private function info()
 {
     return sprintf("<!--\nFrom:%s, \nTo:%s, \nReply-to:%s, \nCC:%s, \nBCC:%s, \nSubject:%s\n-->\n", json_encode($this->message->getFrom()), json_encode($this->message->getTo()), json_encode($this->message->getReplyTo()), json_encode($this->message->getCc()), json_encode($this->message->getBcc()), $this->message->getSubject());
 }
Пример #13
0
 public function send(Swift_Mime_Message $message, &$failedRecipients = null)
 {
     $failedRecipients = (array) $failedRecipients;
     $msg = '* ' . $message->getSubject() . ' *' . PHP_EOL . PHP_EOL;
     if ($message instanceof CM_Mail_Message) {
         $msg .= $message->getText() . PHP_EOL;
     } else {
         $msg .= $message->getBody() . PHP_EOL;
     }
     $logger = $this->getLogger();
     $context = new CM_Log_Context();
     $context->setExtra(['type' => CM_Paging_Log_Mail::getTypeStatic(), 'sender' => $message->getSender(), 'replyTo' => $message->getReplyTo(), 'to' => $message->getTo(), 'cc' => $message->getCc(), 'bcc' => $message->getBcc()]);
     $logger->addMessage($msg, $this->_logLevel, $context);
     return count($message->getTo()) + count($message->getCc()) + count($message->getBcc());
 }
Пример #14
0
 public function testToMethodWithOverride()
 {
     $this->swift->expects($this->once())->method('setTo')->with('*****@*****.**', 'Foo');
     $this->assertInstanceOf(Message::class, $this->message->to('*****@*****.**', 'Foo', true));
 }
Пример #15
0
 /**
  * do send through the API
  *
  * @param Swift_Mime_Message $message
  * @param string[] &$failedRecipients to collect failures by-reference
  * @return AWSResponse
  */
 protected function _doSend(Swift_Mime_Message $message, &$failedRecipients = null)
 {
     $date = date('D, j F Y H:i:s O');
     if (function_exists('hash_hmac') and in_array('sha1', hash_algos())) {
         $hmac = base64_encode(hash_hmac('sha1', $date, $this->AWSSecretKey, true));
     } else {
         $hmac = $this->calculate_RFC2104HMAC($date, $this->AWSSecretKey);
     }
     $auth = "AWS3-HTTPS AWSAccessKeyId=" . $this->AWSAccessKeyId . ", Algorithm=HmacSHA1, Signature=" . $hmac;
     $host = parse_url($this->endpoint, PHP_URL_HOST);
     $path = parse_url($this->endpoint, PHP_URL_PATH);
     $fp = fsockopen('ssl://' . $host, 443, $errno, $errstr, 30);
     if (!$fp) {
         throw new AWSConnectionError("{$errstr} ({$errno})");
     }
     $socket = new ChunkedTransferSocket($fp, $host, $path);
     $socket->header("Date", $date);
     $socket->header("X-Amzn-Authorization", $auth);
     $socket->write("Action=SendRawEmail&RawMessage.Data=");
     $ais = new Swift_AWSInputByteStream($socket);
     $message->toByteStream($ais);
     $ais->flushBuffers();
     $result = $socket->read();
     return $result;
 }
Пример #16
0
 /** Determine the best-use reverse path for this message */
 private function getReversePath(Swift_Mime_Message $message)
 {
     $return = $message->getReturnPath();
     $sender = $message->getSender();
     $from = $message->getFrom();
     $path = null;
     if (!empty($return)) {
         $path = $return;
     } elseif (!empty($sender)) {
         $keys = array_keys($sender);
         $path = array_shift($keys);
     } elseif (!empty($from)) {
         $keys = array_keys($from);
         $path = array_shift($keys);
     }
     return $path;
 }
Пример #17
0
 /**
  * Sends the given message.
  *
  * @param \Swift_Mime_Message $message
  * @param string[]           $failedRecipients An array of failures by-reference
  *
  * @return int The number of sent emails
  */
 public function send(\Swift_Mime_Message $message, &$failedRecipients = null)
 {
     $count = count((array) $message->getTo()) + count((array) $message->getCc()) + count((array) $message->getBcc());
     return $count;
 }
Пример #18
0
 /** Restore a changed message back to its original state */
 private function _restoreMessage(Swift_Mime_Message $message)
 {
   if ($this->_lastMessage === $message)
   {
     if (isset($this->_originalBody))
     {
       $message->setBody($this->_originalBody);
       $this->_originalBody = null;
     }
     if (isset($this->_originalSubject))
     {
       $message->setSubject($this->_originalSubject);
       $this->_originalSubject = null;
     }
     if (!empty($this->_originalChildBodies))
     {
       $children = (array) $message->getChildren();
       foreach ($children as $child)
       {
         $id = $child->getId();
         if (array_key_exists($id, $this->_originalChildBodies))
         {
           $child->setBody($this->_originalChildBodies[$id]);
         }
       }
       $this->_originalChildBodies = array();
     }
     $this->_lastMessage = null;
   }
 }
Пример #19
0
 /**
  * Sends the given message.
  *
  * @param Swift_Mime_Message $message
  * @param string[]           $failedRecipients An array of failures by-reference
  *
  * @return int     The number of sent emails
  */
 public function send(Swift_Mime_Message $message, &$failedRecipients = null)
 {
     $hFile = @fopen($this->sLogFile, 'a');
     if ($hFile) {
         $sTxt = "================== " . date('Y-m-d H:i:s') . " ==================\n";
         $sTxt .= $message->toString() . "\n";
         @fwrite($hFile, $sTxt);
         @fclose($hFile);
     }
     return parent::send($message, $failedRecipients);
 }
Пример #20
0
 /**
  * "Send" the given Message. This transport will add it to a stored collection of sent messages
  * for testing purposes and log the message to the system logger.
  *
  * @param \Swift_Mime_Message $message The message to send
  * @param array &$failedRecipients Failed recipients
  * @return integer
  */
 public function send(\Swift_Mime_Message $message, &$failedRecipients = null)
 {
     self::$deliveredMessages[] = $message;
     $this->systemLogger->log('Sent email to ' . $this->buildStringFromEmailAndNameArray($message->getTo()), LOG_DEBUG, array('message' => $message->toString()));
     return count((array) $message->getTo()) + count((array) $message->getCc()) + count((array) $message->getBcc());
 }
 protected function getToAddress(\Swift_Mime_Message $message)
 {
     return join(',', array_keys($message->getTo()));
 }
 /**
  * @param Swift_Mime_Message $message
  * @param string              $mimeType
  * @return Swift_Mime_MimePart
  */
 protected function getMIMEPart(\Swift_Mime_Message $message, $mimeType)
 {
     foreach ($message->getChildren() as $part) {
         if (strpos($part->getContentType(), $mimeType) === 0) {
             return $part;
         }
     }
 }
 /**
  * Restore a changed message back to its original state
  *
  * @param \Swift_Mime_Message $message
  */
 protected function restoreMessage(\Swift_Mime_Message $message)
 {
     if (count($this->attachments) > 0) {
         foreach ($this->attachments as $attachment) {
             $message->detach($attachment);
         }
         $this->attachments = array();
     }
 }
 public function returnZeroWithFailedAddress(\Swift_Mime_Message $message, &$failedRecipients = null)
 {
     $failedRecipients[] = $message->getTo();
     return 0;
 }
 /** Send a message to all Bcc: recipients */
 private function sendBcc(Swift_Mime_Message $message, $reversePath, array $bcc, array &$failedRecipients)
 {
     $sent = 0;
     foreach ($bcc as $forwardPath => $name) {
         $message->setBcc(array($forwardPath => $name));
         $sent += $this->doMailTransaction($message, $reversePath, array($forwardPath), $failedRecipients);
     }
     return $sent;
 }
 /**
  * {@inheritdoc)
  */
 public function supports(\Swift_Mime_Message $message)
 {
     // why multipart/mixed, because if you attach a file, it'll be the contentType
     // So be careful to not use this transformer if you don't use text/html and attach a file
     return in_array($message->getContentType(), array('multipart/mixed', 'text/html'));
 }
Пример #27
0
 /**
  * Send the given Message to all recipients individually.
  * 
  * This differs from {@link send()} in the way headers are presented to the
  * recipient.  The only recipient in the "To:" field will be the individual
  * recipient it was sent to.
  * 
  * If an iterator is provided, recipients will be read from the iterator
  * one-by-one, otherwise recipient data will be retreived from the Message
  * object.
  * 
  * Sender information is always read from the Message object.
  * 
  * The return value is the number of recipients who were accepted for
  * delivery.
  * 
  * @param Swift_Mime_Message $message
  * @param array &$failedRecipients, optional
  * @param Swift_Mailer_RecipientIterator $it, optional
  * @return int
  * @see send()
  */
 public function batchSend(Swift_Mime_Message $message, &$failedRecipients = null, Swift_Mailer_RecipientIterator $it = null)
 {
     $failedRecipients = (array) $failedRecipients;
     $sent = 0;
     $to = $message->getTo();
     $cc = $message->getCc();
     $bcc = $message->getBcc();
     if (!empty($cc)) {
         $message->setCc(array());
     }
     if (!empty($bcc)) {
         $message->setBcc(array());
     }
     //Use an iterator if set
     if (isset($it)) {
         while ($it->hasNext()) {
             $message->setTo($it->nextRecipient());
             $sent += $this->send($message, $failedRecipients);
         }
     } else {
         foreach ($to as $address => $name) {
             $message->setTo(array($address => $name));
             $sent += $this->send($message, $failedRecipients);
         }
     }
     $message->setTo($to);
     if (!empty($cc)) {
         $message->setCc($cc);
     }
     if (!empty($bcc)) {
         $message->setBcc($bcc);
     }
     return $sent;
 }
Пример #28
0
 /**
  * Get attachments from a MauticMessage
  *
  * @return array
  */
 public function getAttachments()
 {
     return $this->message instanceof MauticMessage ? $this->message->getAttachments() : array();
 }
 /**
  * Restore a changed message back to its original state
  *
  * @param \Swift_Mime_Message $message
  */
 protected function restoreMessage(\Swift_Mime_Message $message)
 {
     if ($this->lastMessage === $message) {
         if (isset($this->originalSubject)) {
             $message->setSubject($this->originalSubject);
             $this->originalSubject = null;
         }
         $this->lastMessage = null;
     }
 }
 /**
  * Get the metadata from a MauticMessage
  */
 public function getMetadata()
 {
     return $this->message instanceof MauticMessage ? $this->message->getMetadata() : array();
 }