Example #1
0
 public function testCanSetReplyToListFromAddressList()
 {
     $list = new AddressList();
     $list->add('*****@*****.**');
     $this->message->addReplyTo('*****@*****.**');
     $this->message->setReplyTo($list);
     $replyTo = $this->message->getReplyTo();
     $this->assertEquals(1, count($replyTo));
     $this->assertFalse($replyTo->has('*****@*****.**'));
     $this->assertTrue($replyTo->has('*****@*****.**'));
 }
Example #2
0
 public function send($data = array(), $viewModel)
 {
     if ($viewModel instanceof ModelInterface) {
         $body = $this->renderModel($viewModel);
     } elseif (is_string($viewModel)) {
         $body = $this->renderText($viewModel);
     } else {
         throw new \Exception('Invalid viewModel for mail body');
     }
     $text = new MimePart('');
     $text->type = "text/plain";
     $html = new MimePart($body);
     $html->type = "text/html";
     $body_html = new MimeMessage();
     $body_html->setParts(array($text, $html));
     $mail = new Mail\Message();
     $mail->setEncoding("UTF-8");
     $mail->setBody($body_html);
     $mail->setFrom($this->_from_mail, $this->_from_name);
     $mail->addTo($data['to']);
     if (isset($data['cc'])) {
         $mail->addCc($data['cc']);
     }
     if (isset($data['bcc'])) {
         $mail->addBcc($data['bcc']);
     }
     if (isset($data['replyTo'])) {
         $mail->addReplyTo($data['replyTo'], $data['replyNameTo']);
     } else {
         $mail->addReplyTo($this->_from_mail, $this->_from_name);
     }
     if (isset($data['dkimSign'])) {
         $signer = $this->getController()->getServiceLocator()->get('DkimSigner');
         $signer->signMessage($mail);
     }
     $mail->setSubject($data['subject']);
     return $this->_transport->send($mail);
 }
 public function run()
 {
     $config = Config::get('xmailer.imap');
     $mail = new StorageImap(array('host' => $config['host'], 'user' => $config['user'], 'password' => $config['password']));
     //$mail = new StorageImap(Config::get('xmailer.imap'));
     if ($mail->countMessages() > 0) {
         $message = $mail->getMessage(1);
         if ($message->getHeaders()->get("from") != null) {
             $from = $message->getHeaders()->get("from")->toString();
         } else {
             $from = "";
         }
         if ($message->getHeaders()->get("to") != null) {
             $to = $message->getHeaders()->get("to")->toString();
         } else {
             $to = "";
         }
         preg_match("/[\\w._%+-]+@[\\w.-]+.[\\w]{2,}/", $from, $fromEmails);
         preg_match("/[\\w._%+-]+@[\\w.-]+.[\\w]{2,}/", $to, $toEmails);
         $sendTo = $this->getEmailAdresses($toEmails);
         if ($this->isValidSender($fromEmails[0])) {
             foreach ($sendTo as $mailadress) {
                 $fwd = new Message();
                 $fwd->setBody($message->getContent());
                 $h = $message->getHeaders();
                 $h->removeHeader('From');
                 $h->removeHeader('To');
                 $h->removeHeader('Reply-To');
                 $fwd->setHeaders($h);
                 $fwd->addFrom($mailadress['from']);
                 $fwd->addTo($mailadress['to']);
                 if (Config::get('xmailer.replyto')) {
                     $fwd->addReplyTo($fromEmails[0]);
                 }
                 $transport = new SendmailTransport();
                 $transport->send($fwd);
             }
             $mail->moveMessage(1, "INBOX.Sent");
         } else {
             $mail->moveMessage(1, "INBOX.Spam");
         }
         return t("%d email sent to %d People.", 1, count($sendTo));
     }
     return t("No emails sent.");
 }
Example #4
0
 /**
  * Set the BCC and CC recipients to the email (they are the same for every email).
  *
  * @return Message
  */
 public function setShadowRecipients()
 {
     //Cc recipients
     foreach ($this->email->getCc() as $emailAddress => $contact) {
         if ($contact instanceof Contact) {
             $this->message->addCc($contact->getEmail(), $contact);
         } else {
             $this->message->addCc($emailAddress, $contact);
         }
     }
     //Bcc recipients
     foreach ($this->email->getBcc() as $emailAddress => $contact) {
         if ($contact instanceof Contact) {
             $this->message->addBcc($contact->getEmail(), $contact);
         } else {
             $this->message->addBcc($emailAddress, $contact);
         }
     }
     if (!is_null($this->email->getReplyTo())) {
         $this->message->addReplyTo($this->email->getReplyTo(), $this->email->getReplyToName());
     }
 }
 public function eventsAction()
 {
     $id = $this->params()->fromRoute('id');
     $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
     $calendar = $em->getRepository(Calendar::class)->find($id);
     if ($calendar && $this->getRequest()->isPost()) {
         try {
             $data = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
             if (!isset($data['action'])) {
                 return new ApiProblemResponse(new ApiProblem(404, 'Not Found Action'));
             }
             switch ($data['action']) {
                 case 'save':
                     $calendarEvent = new CalendarEvent();
                     $calendarEvent->setStartAt(new \DateTime($data['data']['startAt']))->setEndAt(new \DateTime($data['data']['endAt']))->setEmail($data['data']['email'])->setName($data['data']['name'])->setNotes($data['data']['notes'])->setCalendar($calendar);
                     $em->persist($calendarEvent);
                     $em->flush();
                     try {
                         $date = new \DateTime($data['data']['startAt']);
                         $mail = new Mail\Message();
                         $mail->setBody($calendar->getUser()->getDisplayName() . ' will be ready start conversation at ' . $date->format("m/d/Y H:i"));
                         $mail->setFrom('*****@*****.**', 'Calendar OpsDesk');
                         $mail->addTo($data['data']['email'], $data['data']['name']);
                         $mail->setSubject('You created meet with ' . $calendar->getUser()->getDisplayName());
                         $mail->addReplyTo($calendar->getUser()->getEmail());
                         $transport = new Mail\Transport\Sendmail();
                         $transport->send($mail);
                         $mail = new Mail\Message();
                         $mail->setBody($data['data']['name'] . ' will be ready start conversation at ' . $date->format("m/d/Y H:i"));
                         $mail->setFrom('*****@*****.**', 'Calendar OpsDesk');
                         $mail->addTo($calendar->getUser()->getEmail(), $data['data']['name']);
                         $mail->setSubject('New booking with ' . $data['data']['name']);
                         $mail->addReplyTo($data['data']['email']);
                         $transport = new Mail\Transport\Sendmail();
                         $transport->send($mail);
                     } catch (Exception $e) {
                     }
                     break;
                 case 'list':
                     $hydrator = new DoctrineObject($em, true);
                     $expr = Criteria::expr();
                     $criteria = Criteria::create();
                     $criteria->where($expr->andX($expr->gte('startAt', new \DateTime($data['startAt'])), $expr->lte('endAt', new \DateTime($data['endAt']))));
                     return new JsonModel(array_map(function ($event) use($hydrator) {
                         return $hydrator->extract($event);
                     }, $calendar->getEventsCollection()->matching($criteria)->getValues()));
                     break;
                 default:
                     return new ApiProblemResponse(new ApiProblem(404, 'Not Found Action'));
             }
         } catch (Exception $e) {
             return new ApiProblemResponse(new ApiProblem(503, $e->getMessage()));
         }
     }
     return new JsonModel([]);
 }
Example #6
0
 /**
  * Prepare email to send.
  */
 private function prepare($email)
 {
     //Template Variables
     $templateVars = $this->config["template_vars"];
     $templateVars = array_merge($templateVars, $email->toArray());
     //If not layout, use default
     if (!$email->getLayoutName()) {
         $email->setLayoutName($this->config["defaults"]["layout_name"]);
     }
     //If not recipient, send to admin
     if (count($email->getTo()) == 0) {
         $email->addTo($this->config["emails"]["admin"]);
     }
     //If not sender, use default
     if (!$email->getFrom()) {
         $email->setFrom($this->config["defaults"]["from_email"]);
         $email->setFromName($this->config["defaults"]["from_name"]);
     }
     //Render system
     $renderer = new PhpRenderer();
     $resolver = new AggregateResolver();
     $stack = new TemplatePathStack();
     foreach ($this->config["template_path_stack"] as $path) {
         $stack->addPath($path);
     }
     $resolver->attach($stack);
     $renderer->setResolver($resolver);
     // Subject
     if (!$email->getSubject()) {
         $subjectView = $this->createView($templateVars, "subject", $email->getTemplateName());
         try {
             $email->setSubject($renderer->render($subjectView));
         } catch (\Exception $e) {
             $email->setSubject(null);
         }
     }
     // Text Content
     if (!$email->getTextContent()) {
         $textView = $this->createView($templateVars, "txt", $email->getTemplateName());
         $layoutTextView = new ViewModel($templateVars);
         $layoutTextView->setTemplate("/layout/txt/" . $email->getLayoutName());
         try {
             $layoutTextView->setVariable("content", $renderer->render($textView));
             $email->setTextContent($renderer->render($layoutTextView));
         } catch (\Exception $e) {
             $email->setTextContent(null);
         }
     }
     // Html Content
     if (!$email->getHtmlContent()) {
         $htmlView = $this->createView($templateVars, "html", $email->getTemplateName());
         $layoutHtmlView = new ViewModel($templateVars);
         $layoutHtmlView->setTemplate("/layout/html/" . $email->getLayoutName());
         try {
             $layoutHtmlView->setVariable("content", $renderer->render($htmlView));
             $email->setHtmlContent($renderer->render($layoutHtmlView));
         } catch (\Exception $e) {
             $email->setHtmlContent(null);
         }
     }
     //Create Zend Message
     $message = new Message();
     //From
     $message->setFrom($email->getFrom(), $email->getFromName());
     //Reply to
     if ($this->config["defaults"]["reply_to"]) {
         $message->addReplyTo($this->config["defaults"]["reply_to"], $this->config["defaults"]["reply_to_name"]);
     }
     if ($email->getReplyTo()) {
         $message->addReplyTo($email->getReplyTo(), $email->getReplyToName());
     }
     //To recipients
     foreach ($email->getTo() as $emailAddress => $user) {
         if (is_object($user)) {
             if ($user->getMailOpt()) {
                 $message->addTo($emailAddress, $user->getFullName());
             }
         } else {
             $message->addTo($emailAddress, $user);
         }
     }
     //Cc recipients
     foreach ($email->getCc() as $emailAddress => $name) {
         if (is_object($user)) {
             if ($user->getMailOpt()) {
                 $message->addCc($emailAddress, $user->getFullName());
             }
         } else {
             $message->addCc($emailAddress, $user);
         }
     }
     //Bcc recipients
     foreach ($email->getBcc() as $emailAddress => $name) {
         if (is_object($user)) {
             if ($user->getMailOpt()) {
                 $message->addBcc($emailAddress, $user->getFullName());
             }
         } else {
             $message->addBcc($emailAddress, $user);
         }
     }
     //Subject
     if ($email->getSubject()) {
         $message->setSubject($email->getSubject());
     }
     // Body Multipart
     // Issue - not able to send TXT and HTML multibody
     // http://framework.zend.com/issues/browse/ZF2-196
     /*
     if($textContent) {
     	$textContent = new MimePart($textContent);
     	$textContent->type = "text/plain";
     }
             if($htmlContent) {
     	$htmlContent = new MimePart($htmlContent);
     	$htmlContent->type = "text/html";
             }
     $body = new MimeMessage();
     $body->setParts(array($textContent, $htmlContent));
             
     $message->setBody($body);		
     $message->getHeaders()->get('content-type')->setType('multipart/alternative');
     */
     //Body (Just html email right now)
     $htmlContent = new MimePart($email->getHtmlContent());
     $htmlContent->type = "text/html";
     $body = new MimeMessage();
     $body->setParts(array($htmlContent));
     $message->setBody($body);
     return $message;
 }
 /**
  * @return Message
  */
 public static function getValid()
 {
     $message = new Message();
     $message->setFrom(MailWrapperTestBootstrap::$from);
     $message->addTo(MailWrapperTestBootstrap::$toAddresses[0]);
     $message->addTo(MailWrapperTestBootstrap::$toAddresses[1]);
     $message->addCC(MailWrapperTestBootstrap::$ccAddresses[0]);
     $message->addCC(MailWrapperTestBootstrap::$ccAddresses[1]);
     $message->addBCC(MailWrapperTestBootstrap::$bccAddresses[0]);
     $message->addBCC(MailWrapperTestBootstrap::$bccAddresses[1]);
     $message->addReplyTo(MailWrapperTestBootstrap::$alternate);
     $message->setSubject(MailWrapperTestBootstrap::$subject);
     $message->setBody(MailWrapperTestBootstrap::$contentText);
     return $message;
 }
Example #8
0
 public function send(Email $email, $params = array(), &$message = null, $attachmetList = [])
 {
     if (!$message) {
         $message = new Message();
     }
     $config = $this->config;
     $params = $this->params + $params;
     if ($email->get('from')) {
         $fromName = null;
         if (!empty($params['fromName'])) {
             $fromName = $params['fromName'];
         } else {
             $fromName = $config->get('outboundEmailFromName');
         }
         $message->addFrom(trim($email->get('from')), $fromName);
     } else {
         if (!empty($params['fromAddress'])) {
             $fromAddress = $params['fromAddress'];
         } else {
             if (!$config->get('outboundEmailFromAddress')) {
                 throw new Error('outboundEmailFromAddress is not specified in config.');
             }
             $fromAddress = $config->get('outboundEmailFromAddress');
         }
         if (!empty($params['fromName'])) {
             $fromName = $params['fromName'];
         } else {
             $fromName = $config->get('outboundEmailFromName');
         }
         $message->addFrom($fromAddress, $fromName);
     }
     if (!$email->get('from')) {
         $email->set('from', $fromAddress);
     }
     if (!empty($params['replyToAddress'])) {
         $replyToName = null;
         if (!empty($params['replyToName'])) {
             $replyToName = $params['replyToName'];
         }
         $message->setReplyTo($params['replyToAddress'], $replyToName);
     }
     $value = $email->get('to');
     if ($value) {
         $arr = explode(';', $value);
         if (is_array($arr)) {
             foreach ($arr as $address) {
                 $message->addTo(trim($address));
             }
         }
     }
     $value = $email->get('cc');
     if ($value) {
         $arr = explode(';', $value);
         if (is_array($arr)) {
             foreach ($arr as $address) {
                 $message->addCC(trim($address));
             }
         }
     }
     $value = $email->get('bcc');
     if ($value) {
         $arr = explode(';', $value);
         if (is_array($arr)) {
             foreach ($arr as $address) {
                 $message->addBCC(trim($address));
             }
         }
     }
     $value = $email->get('replyTo');
     if ($value) {
         $arr = explode(';', $value);
         if (is_array($arr)) {
             foreach ($arr as $address) {
                 $message->addReplyTo(trim($address));
             }
         }
     }
     $attachmentPartList = array();
     $attachmentCollection = $email->get('attachments');
     $attachmentInlineCollection = $email->getInlineAttachments();
     foreach ($attachmetList as $attachment) {
         $attachmentCollection[] = $attachment;
     }
     if (!empty($attachmentCollection)) {
         foreach ($attachmentCollection as $a) {
             $fileName = 'data/upload/' . $a->id;
             $attachment = new MimePart(file_get_contents($fileName));
             $attachment->disposition = Mime::DISPOSITION_ATTACHMENT;
             $attachment->encoding = Mime::ENCODING_BASE64;
             $attachment->filename = $a->get('name');
             if ($a->get('type')) {
                 $attachment->type = $a->get('type');
             }
             $attachmentPartList[] = $attachment;
         }
     }
     if (!empty($attachmentInlineCollection)) {
         foreach ($attachmentInlineCollection as $a) {
             $fileName = 'data/upload/' . $a->id;
             $attachment = new MimePart(file_get_contents($fileName));
             $attachment->disposition = Mime::DISPOSITION_INLINE;
             $attachment->encoding = Mime::ENCODING_BASE64;
             $attachment->id = $a->id;
             if ($a->get('type')) {
                 $attachment->type = $a->get('type');
             }
             $attachmentPartList[] = $attachment;
         }
     }
     $message->setSubject($email->get('name'));
     $body = new MimeMessage();
     $textPart = new MimePart($email->getBodyPlainForSending());
     $textPart->type = 'text/plain';
     $textPart->encoding = Mime::ENCODING_QUOTEDPRINTABLE;
     $textPart->charset = 'utf-8';
     if ($email->get('isHtml')) {
         $htmlPart = new MimePart($email->getBodyForSending());
         $htmlPart->encoding = Mime::ENCODING_QUOTEDPRINTABLE;
         $htmlPart->type = 'text/html';
         $htmlPart->charset = 'utf-8';
     }
     if (!empty($attachmentPartList)) {
         $messageType = 'multipart/related';
         if ($email->get('isHtml')) {
             $content = new MimeMessage();
             $content->addPart($textPart);
             $content->addPart($htmlPart);
             $messageType = 'multipart/mixed';
             $contentPart = new MimePart($content->generateMessage());
             $contentPart->type = "multipart/alternative;\n boundary=\"" . $content->getMime()->boundary() . '"';
             $body->addPart($contentPart);
         } else {
             $body->addPart($textPart);
         }
         foreach ($attachmentPartList as $attachmentPart) {
             $body->addPart($attachmentPart);
         }
     } else {
         if ($email->get('isHtml')) {
             $body->setParts(array($textPart, $htmlPart));
             $messageType = 'multipart/alternative';
         } else {
             $body = $email->getBodyPlainForSending();
             $messageType = 'text/plain';
         }
     }
     $message->setBody($body);
     if ($messageType == 'text/plain') {
         if ($message->getHeaders()->has('content-type')) {
             $message->getHeaders()->removeHeader('content-type');
         }
         $message->getHeaders()->addHeaderLine('Content-Type', 'text/plain; charset=UTF-8');
     } else {
         if (!$message->getHeaders()->has('content-type')) {
             $contentTypeHeader = new \Zend\Mail\Header\ContentType();
             $message->getHeaders()->addHeader($contentTypeHeader);
         }
         $message->getHeaders()->get('content-type')->setType($messageType);
     }
     $message->setEncoding('UTF-8');
     try {
         $rand = mt_rand(1000, 9999);
         if ($email->get('parentType') && $email->get('parentId')) {
             $messageId = '' . $email->get('parentType') . '/' . $email->get('parentId') . '/' . time() . '/' . $rand . '@espo';
         } else {
             $messageId = '' . md5($email->get('name')) . '/' . time() . '/' . $rand . '@espo';
         }
         if ($email->get('isSystem')) {
             $messageId .= '-system';
         }
         $messageIdHeader = new \Zend\Mail\Header\MessageId();
         $messageIdHeader->setId($messageId);
         $message->getHeaders()->addHeader($messageIdHeader);
         $this->transport->send($message);
         $email->set('messageId', '<' . $messageId . '>');
         $email->set('status', 'Sent');
         $email->set('dateSent', date("Y-m-d H:i:s"));
     } catch (\Exception $e) {
         throw new Error($e->getMessage(), 500);
     }
     $this->useGlobal();
 }
Example #9
0
    if ($parameters['isHtml']) {
        $html = new MimePart($parameters['body']);
        $html->type = "text/html";
        $body = new MimeMessage();
        $body->addPart($html);
    } else {
        $body = $parameters['body'];
    }
    $mail->setBody($body);
    $logTo = "Enviando email para:";
    //Destinatarios
    foreach ($parameters['to'] as $to) {
        $logTo .= " " . $to['name'] . "<" . $to['email'] . ">";
        $mail->addTo($to['email'], $to['name']);
    }
    file_put_contents($logFile, "\t" . $logTo . "\n", FILE_APPEND);
    //Remetente
    $from = $parameters['from'];
    $mail->setFrom($from['email'], $from['name']);
    foreach ($parameters['replyTo'] as $replyTo) {
        $mail->addReplyTo($replyTo['email'], $replyTo['name']);
    }
    //Enviar
    $transport = new Sendmail();
    $transport->send($mail);
    file_put_contents($logFile, "\tOperação concluída \n", FILE_APPEND);
    return true;
} catch (\Exception $ex) {
    file_put_contents($logFile, "\t" . $ex->getMessage() . "\n", FILE_APPEND);
    return false;
}
 /**
  * pack tagged array of data to SendMessage format
  *
  *
  * @param Array $mailArray
  *
  * return array of data that will be converted to
  * send message
  *
  * @return Array
  */
 public function packData($mailArray)
 {
     $mimeMail = new Message();
     $textPart = $this->packText($mailArray['text'], $mailArray['header']['content-type']);
     unset($mailArray['header']['content-type']);
     $attachmentParts = $this->packAttachments($mailArray['link']);
     if (count($attachmentParts)) {
         $mimeMail->addPart($textPart);
         foreach ($attachmentParts as $part) {
             $mimeMail->addPart($part);
         }
     } else {
         $mimeMail->addPart($textPart);
     }
     $returnMail = new SendMessage();
     $returnMail->setBody($mimeMail);
     foreach ($mailArray['header'] as $header => $value) {
         switch ($header) {
             case 'references':
                 if (is_array($value)) {
                     $res = '';
                     foreach ($value as $reference) {
                         $res .= $reference . ' ';
                     }
                 } elseif (is_string($value)) {
                     $res = $value;
                 } else {
                     continue;
                 }
                 $headers = $returnMail->getHeaders();
                 $headers->addHeaderLine($header, $res);
                 $returnMail->setHeaders($headers);
                 break;
             case 'bcc':
                 $returnMail->addBcc($value);
                 break;
             case 'cc':
                 $returnMail->addCc($value);
                 break;
             case 'to':
                 $returnMail->addTo($value);
                 break;
             case 'from':
                 $returnMail->addFrom($value);
                 break;
             case 'reply-to':
                 $returnMail->addReplyTo($value);
                 break;
             case 'subject':
                 $returnMail->setSubject($value);
                 break;
             default:
                 $headers = $returnMail->getHeaders();
                 $headers->addHeaderLine($header, $value);
                 $returnMail->setHeaders($headers);
                 break;
         }
     }
     return $returnMail;
 }