public function run() { $transport = new SmtpTransport(new SmtpOptions(array('name' => $this->host, 'host' => $this->host, 'port' => $this->port, 'connection_config' => array('username' => $this->sender->getUsername(), 'password' => $this->sender->getPassword())))); if ($this->auth !== null) { $transport->getOptions()->setConnectionClass($this->auth); } $message = new Message(); $message->addFrom($this->sender->getUsername())->setSubject($this->subject); if ($this->bcc) { $message->addBcc($this->recipients); } else { $message->addTo($this->recipients); } $body = new MimeMessage(); if ($this->htmlBody == null) { $text = new MimePart($this->textBody); $text->type = "text/plain"; $body->setParts(array($text)); } else { $html = new MimePart($this->htmlBody); $html->type = "text/html"; $body->setParts(array($html)); } $message->setBody($body); $transport->send($message); }
/** * @inheritDoc */ public static function fromWrappedMessage(MailWrappedMessage $wrappedMessage = null, $transport = null) { if (!$wrappedMessage instanceof MailWrappedMessage) { throw new MailWrapperSetupException('Not MailWrappedMessage'); } $message = new Message(); foreach ($wrappedMessage->getToRecipients() as $address) { $message->addTo($address); } foreach ($wrappedMessage->getCcRecipients() as $address) { $message->addCc($address); } foreach ($wrappedMessage->getBccRecipients() as $address) { $message->addBcc($address); } $message->setReplyTo($wrappedMessage->getReplyTo()); $message->setFrom($wrappedMessage->getFrom()); $message->setSubject($wrappedMessage->getSubject()); if ($wrappedMessage->getContentText()) { $message->setBody($wrappedMessage->getContentText()); } if ($wrappedMessage->getContentHtml()) { $html = new MimePart($wrappedMessage->getContentHtml()); $html->type = "text/html"; $message->setBody($body); } return $message; }
/** * Send email * * @access public */ public function execute() { $payload = $this->getContent(); $from = $payload['from']; $to = $payload['to']; $subject = $payload['subject']; $body = $payload['body']; $message = new Message(); $message->addTo($to)->addFrom($from)->setSubject($subject)->setBody($body); if (array_key_exists('bcc', $payload)) { $bcc = $payload['bcc']; $message->addBcc($bcc); } if (array_key_exists('cc', $payload)) { $cc = $payload['cc']; $message->addCc($cc); } $this->transport->send($message); }
public function sendMail($mail) { // Build the message body $mimeParts = array(); foreach ($mail->getParts() as $part) { $mimePart = new MimePart($part->getContent()); $mimePart->type = $part->getType(); $mimeParts[] = $mimePart; } $body = new MimeMessage(); $body->setParts($mimeParts); // Build the message. $message = new Mail\Message(); $message->setBody($body); // Set the participants foreach ($mail->getParticipants() as $participant) { if ($participant->getComposition() == 'to') { $message->addTo($participant->getAddress(), $participant->getName()); } if ($participant->getComposition() == 'cc') { $message->addCc($participant->getAddress(), $participant->getName()); } if ($participant->getComposition() == 'bcc') { $message->addBcc($participant->getAddress(), $participant->getName()); } if ($participant->getComposition() == 'from') { $message->addFrom($participant->getAddress(), $participant->getName()); } } // Set the subject $message->setSubject($mail->getSubject()); $contentType = $mail->getContentType(); if ($contentType) { $message->getHeaders()->get('content-type')->setType($contentType); } // Create the transport and send. $transport = new SmtpTransport(); $transport->setOptions(new SmtpOptions($this->options)); $transport->send($message); }
/** * 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 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 testSettingNonAsciiEncodingForcesMimeEncodingOfSomeHeaders() { $this->message->addTo('*****@*****.**', 'ZF DevTeam'); $this->message->addFrom('*****@*****.**', "Matthew Weier O'Phinney"); $this->message->addCc('*****@*****.**', 'ZF Contributors List'); $this->message->addBcc('*****@*****.**', 'ZF CR Team'); $this->message->setSubject('This is a subject'); $this->message->setEncoding('UTF-8'); $test = $this->message->getHeaders()->toString(); $expected = '=?UTF-8?Q?ZF=20DevTeam?='; $this->assertContains($expected, $test); $this->assertContains('<*****@*****.**>', $test); $expected = "=?UTF-8?Q?Matthew=20Weier=20O'Phinney?="; $this->assertContains($expected, $test, $test); $this->assertContains('<*****@*****.**>', $test); $expected = '=?UTF-8?Q?ZF=20Contributors=20List?='; $this->assertContains($expected, $test); $this->assertContains('<*****@*****.**>', $test); $expected = '=?UTF-8?Q?ZF=20CR=20Team?='; $this->assertContains($expected, $test); $this->assertContains('<*****@*****.**>', $test); $expected = 'Subject: =?UTF-8?Q?This=20is=20a=20subject?='; $this->assertContains($expected, $test); }
/** * send email * * @param $fromemail * @param $accessToken * @param $email_type * @param $imap_server * @param $subject * @param $body * @param $toEmail * @param $ccEmail * @param $bccEmail * @param $attachemnts * @param string $mailtype * * @return bool|void * * @since rt-Helpdesk 0.1 */ public function sendemail($fromname, $fromemail, $accessToken, $email_type, $imap_server, $subject, $body, $toEmail, $ccEmail, $bccEmail, $attachemnts, $email = null, $mailtype = 'notification') { set_time_limit(0); if (!$this->try_imap_login($fromemail, $accessToken, $email_type, $imap_server)) { return false; } $transport = new SmtpTransport(); $smtp_args = array(); switch ($email_type) { case 'goauth': $smtp_args['name'] = 'gmail-smtp'; $smtp_args['host'] = 'smtp.gmail.com'; $smtp_args['port'] = 465; $smtp_args['connection_class'] = 'oauth2'; $smtp_args['connection_config'] = array('xoauth2_request' => $this->authString, 'ssl' => 'ssl'); break; case 'imap': global $rt_imap_server_model; $server = $rt_imap_server_model->get_server_by_id($imap_server); if (empty($server)) { echo 'Mail Server Not Found. Invalid Server id.'; return false; } $smtp_args['name'] = $server->outgoing_smtp_server; $smtp_args['host'] = $server->outgoing_smtp_server; $smtp_args['port'] = $server->outgoing_smtp_port; $smtp_args['connection_class'] = 'login'; $smtp_args['connection_config'] = array('username' => $fromemail, 'password' => rtmb_encrypt_decrypt($accessToken), 'ssl' => $server->outgoing_smtp_enc); break; default: break; } $options = new SmtpOptions($smtp_args); $transport->setOptions($options); $message = new Message(); $message->addFrom($fromemail, $fromname); if (!empty($email)) { $message_id = $reference_id = $in_reply_to = ''; if ('comment' == $email->refrence_type) { $message_id = get_comment_meta($email->refrence_id, '_rtlib_messageid', true); $reference_id = get_comment_meta($email->refrence_id, '_rtlib_references', true); if (empty($message_id)) { $comment = get_comment($email->refrence_id); $post_id = $comment->comment_post_ID; } } else { if ('post' == $email->refrence_type) { $post_id = $email->refrence_id; } } if (isset($post_id)) { $reference_id = get_post_meta($post_id, '_rtlib_references', true); $message_id = rtmb_get_reply_to_from_ref_id($reference_id); $reply_to = apply_filters('rtlib_reply_to_header', '', $fromemail, $post_id); if (!empty($reply_to)) { $message->addCustomeHeader('Reply-To', trim($reply_to)); } } //Get reply to header if (!empty($message_id)) { $message->addCustomeHeader('In-Reply-To', trim($message_id)); } //Get References header if (!empty($message_id)) { $reference_id = rtmb_add_message_id_in_ref_id($message_id, $reference_id); } if (!empty($reference_id)) { $reference_ids = rtmb_get_reference_id_array($reference_id); $_reference_id = implode(' ', $reference_ids); $message->addCustomeHeader('References', $_reference_id); } // Add x-mailer if (!empty($email->refrence_id)) { $message->addCustomeHeader('X-Mailer', 'rtCamp-mail-lib'); if ('comment' == $email->refrence_type) { $comment = get_comment($email->refrence_id); $post_id = $comment->comment_post_ID; } else { $post_id = $email->refrence_id; } $new_message_id = rtmb_generate_message_id($post_id, $email->id); rtmb_add_message_id_in_ref_id($new_message_id, $reference_id, $post_id); $message->addCustomeHeader('Message-ID', $new_message_id); } } //$mail->setFrom($fromemail); $message->setSubject(stripslashes_deep(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'))); //$mail->setSubject($subject); if (!empty($toEmail)) { foreach ($toEmail as $temail) { //$mail->addTo($temail["email"], isset($temail["name"]) ? $temail["name"] : ''); $message->addTo($temail['email'], isset($temail['name']) ? $temail['name'] : ''); } } if (!empty($ccEmail)) { foreach ($ccEmail as $temail) { //$mail->addCc($temail["email"], isset($temail["name"]) ? $temail["name"] : ''); $message->addCc($temail['email'], isset($temail['name']) ? $temail['name'] : ''); } } if (!empty($bccEmail)) { foreach ($bccEmail as $temail) { if (isset($temail['email'])) { $message->addBcc($temail['email'], isset($temail['name']) ? $temail['name'] : ''); } } } // create a MimeMessage object that will hold the mail body and any attachments $bodyPart = new MimeMessage(); $bodyMessage = new MimePart($body); $bodyMessage->type = 'text/html'; $bodyMessage->encoding = Mime::ENCODING_QUOTEDPRINTABLE; $bodyPart->addPart($bodyMessage); if (!empty($attachemnts) && is_array($attachemnts)) { foreach ($attachemnts as $attach) { $file_array = explode('/', $attach); $fileName = $file_array[count($file_array) - 1]; $attachment = new MimePart(file_get_contents($attach)); $attachment->type = rtmb_get_mime_type($attach); $attachment->filename = $fileName; $attachment->encoding = Zend\Mime\Mime::ENCODING_BASE64; $attachment->disposition = Zend\Mime\Mime::DISPOSITION_ATTACHMENT; $bodyPart->addPart($attachment); } } $message->setBody($bodyPart); $transport->send($message); return true; }
/** * @group medium */ public function testMsgHandleUidSearch() { $path1 = './test_data/test_mailbox_' . date('Ymd_His') . '_' . uniqid('', true); $log = new Logger('test_application'); #$log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); $server = new Server('', 0); $server->setLog($log); $server->init(); $storage1 = new DirectoryStorage(); $storage1->setPath($path1); $server->addStorage($storage1); $client = new Client(); $client->setServer($server); $client->setId(1); $msg = $client->msgHandle('17 uid search'); $this->assertEquals('17 NO uid failure' . Client::MSG_SEPARATOR, $msg); $client->setStatus('hasAuth', true); $msg = $client->msgHandle('17 uid search'); $this->assertEquals('17 NO No mailbox selected.' . Client::MSG_SEPARATOR, $msg); $client->msgHandle('6 select INBOX'); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 1'); $message->setBody('my_body'); $server->addMail($message, null, null, false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 2'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_ANSWERED), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->addBcc('*****@*****.**'); $message->setSubject('my_subject 3'); $message->setBody('my_body'); $server->addMail($message, null, null, false); $headers = new Headers(); $headers->addHeader(Date::fromString('Date: ' . date('r', mktime(0, 0, 0, 2, 21, 1987)))); $message = new Message(); $message->setHeaders($headers); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 4'); $message->setBody('my_body'); $server->addMail($message, null, null, false); $message = new Message(); $message->setHeaders($headers); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 5'); $message->setBody('my_body'); $server->addMail($message, null, null, false); $headers = new Headers(); $headers->addHeader(Date::fromString('Date: ' . date('r', mktime(0, 0, 0, 11, 20, 1986)))); $message = new Message(); $message->setHeaders($headers); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 6'); $message->setBody('hello world'); $server->addMail($message, null, null, false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 7'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_DELETED), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 8'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_DRAFT), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 9'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_FLAGGED), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 10'); $message->setBody('my_body'); $server->addMail($message, null, null, false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 11'); $message->setBody('my super fancy long body for testing the size'); $server->addMail($message, null, null, false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 12'); $message->setBody('my_body'); $server->addMail($message, null, array(), true); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 13'); $message->setBody('my_body'); $server->addMail($message, null, array(), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); #$message->setSubject('my_subject 14'); $message->setBody('my_body'); $server->addMail($message, null, array(), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 15'); $message->setBody('this is a test body'); $server->addMail($message, null, array(), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 16'); #$message->setBody('my_body'); $server->addMail($message, null, array(), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 17'); $message->setBody('my_body'); $server->addMail($message, null, array(), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 18'); $message->setBody('my_body'); $server->addMail($message, null, array(), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 19'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_ANSWERED), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 20'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_DELETED), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->setSubject('my_subject 21'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_DRAFT), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->addCc('*****@*****.**'); $message->setSubject('my_subject 22'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_FLAGGED), false); $message = new Message(); $message->addFrom('*****@*****.**'); $message->addTo('*****@*****.**'); $message->addCc('*****@*****.**'); $message->setSubject('my_subject 23'); $message->setBody('my_body'); $server->addMail($message, null, array(Storage::FLAG_SEEN), false); $msg = $client->msgHandle('17 uid SEARCH'); $expect = '17 BAD Arguments invalid.' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH ALL'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100008 100009 100010 '; $expect .= '100011 100012 100013 100014 100015 100016 100017 100018 100019 100020 100021 '; $expect .= '100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH ANSWERED'); $expect = '* SEARCH 100002 100019' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH BCC apple'); $expect = '* SEARCH 100003' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); #$msg = $client->msgHandle('17 uid SEARCH BEFORE 1990'); $expect = '* SEARCH 100004 100005' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; #$this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH BODY world'); $expect = '* SEARCH 100006' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH CC dev3'); $expect = '* SEARCH 100022 100023' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH DELETED'); $expect = '* SEARCH 100007 100020' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH DRAFT'); $expect = '* SEARCH 100008 100021' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH FLAGGED'); $expect = '* SEARCH 100009 100022' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH FROM test@'); $expect = '* SEARCH 100010' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH HEADER Date 1987'); $expect = '* SEARCH 100004 100005' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH HEADER TO fox21'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100008 100009 100010 100011 100012 '; $expect .= '100013 100014 100015 100016 100018 100019 100020 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH LARGER 40'); $expect = '* SEARCH 100011' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH NEW'); $expect = '* SEARCH 100012' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH OLD'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100008 100009 100010 100011 100013'; $expect .= ' 100014 100015 100016 100017 100018 100019 100020 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH ON 1987-02-21'); $expect = '* SEARCH 100004 100005' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH OR 5 6'); $expect = '* SEARCH 100005 100006' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH OR OR 5 6 7'); $expect = '* SEARCH 100005 100006 100007' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH RECENT'); $expect = '* SEARCH 100012' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH SEEN'); $expect = '* SEARCH 100001 100003 100004 100005 100006 100010 100011 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH SENTBEFORE 1990-01-01'); $expect = '* SEARCH 100004 100005 100006' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH SENTON 1987-02-21'); $expect = '* SEARCH 100004 100005' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH SENTSINCE 1987-02-21'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100007 100008 100009 100010 100011 100012 100013'; $expect .= ' 100014 100015 100016 100017 100018 100019 100020 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH SMALLER 30'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100008 100009 100010 100012 100013'; $expect .= ' 100014 100015 100016 100017 100018 100019 100020 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH SUBJECT "t 13"'); $expect = '* SEARCH 100013' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH TEXT test'); $expect = '* SEARCH 100011 100015' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH TO steve'); $expect = '* SEARCH 100017' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH UID 100018'); $expect = '* SEARCH 100018' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH UNANSWERED'); $expect = '* SEARCH 100001 100003 100004 100005 100006 100007 100008 100009 100010 100011 100012 100013'; $expect .= ' 100014 100015 100016 100017 100018 100020 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH UNDELETED'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100008 100009 100010 100011 100012 100013'; $expect .= ' 100014 100015 100016 100017 100018 100019 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH UNDRAFT'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100009 100010 100011 100012 100013'; $expect .= ' 100014 100015 100016 100017 100018 100019 100020 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH UNFLAGGED'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100008 100010 100011 100012 100013'; $expect .= ' 100014 100015 100016 100017 100018 100019 100020 100021 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); #$msg = $client->msgHandle('17 uid SEARCH UNKEYWORD'); $expect = '* SEARCH 123' . Client::MSG_SEPARATOR . '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; #$this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH UNSEEN'); $expect = '* SEARCH 100002 100007 100008 100009 100012 100013 100014 100015 100016 100017 100018'; $expect .= ' 100019 100020 100021 100022' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH OR CC dev3 TO steve'); $expect = '* SEARCH 100017 100022 100023'; $expect .= '' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH OR CC dev3 NOT CC dev2'); $expect = '* SEARCH 100001 100002 100003 100004 100005 100006 100007 100008 100009 100010 100011'; $expect .= ' 100012 100013 100014 100015 100016 100017'; $expect .= ' 100018 100019 100020 100021 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH CC dev3 AND TO dev2'); $expect = ''; $expect .= '* SEARCH 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH CC dev3 AND OR FROM dev1 TO dev2'); $expect = ''; $expect .= '* SEARCH 100022 100023' . Client::MSG_SEPARATOR; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH CC dev3 AND AND FROM dev1 NOT TO dev2'); $expect = ''; $expect .= '17 OK UID SEARCH completed' . Client::MSG_SEPARATOR; $this->assertEquals($expect, $msg); $msg = $client->msgHandle('17 uid SEARCH BEFORE 1985'); $this->assertEquals('17 OK UID SEARCH completed' . Client::MSG_SEPARATOR, $msg); $msg = $client->msgHandle('17 uid SEARCH BODY xyz'); $this->assertEquals('17 OK UID SEARCH completed' . Client::MSG_SEPARATOR, $msg); #$msg = $client->msgHandle('17 uid SEARCH OR (UNDELETED FROM "thefox") ANSWERED AND FROM "21"'); #$msg = $client->msgHandle('17 uid SEARCH UNDELETED HEADER From @fox21.at HEADER Date 2014'); #$msg = $client->msgHandle('17 uid SEARCH NOT 5'); #$msg = $client->msgHandle('17 uid SEARCH NOT UID 100005'); #$this->assertEquals('x17 OK UID SEARCH completed'.Client::MSG_SEPARATOR, $msg); #$msg = $client->msgHandle('17 uid SEARCH NOT UID 100021'); $server->shutdown(); $filesystem = new Filesystem(); $filesystem->remove($path1); }
public function send() { # differ the following scenarios: # - plain text email # - plain text email with 1 or n attachments # - html email with text alternative # - html email with text alternative and 1 or n attachments $content = new Mime\Message(); if (!$this->isHtmlMessage()) { $content->addPart($this->getTextMessage()); } else { $content->addPart($this->getTextMessage()); $content->addPart($this->getHtmlMessage()); } if (count($this->getAttachments()) == 0) { $body = $content; } else { $contentPart = new Mime\Part($content->generateMessage()); $contentPart->type = 'multipart/alternative;' . PHP_EOL . ' boundary="' . $content->getMime()->boundary() . '"'; $body = new Mime\Message(); $body->addPart($contentPart); foreach ($this->getAttachments() as $att) { $body->addPart($att); } } $message = new Mail\Message(); $message->setEncoding('utf-8'); $message->setBody($body); if ($this->isHtmlMessage()) { if (count($this->getAttachments()) == 0) { $message->getHeaders()->get('content-type')->addParameter('charset', 'utf-8')->setType('multipart/alternative'); } else { $message->getHeaders()->get('content-type')->addParameter('charset', 'utf-8')->setType('multipart/mixed'); // Important to get all attachments into this email. } } else { $message->getHeaders()->get('content-type')->addParameter('charset', 'utf-8')->setType('text/plain'); } foreach ($this->getTo() as $user) { $message->addTo($user->getEmail()); } foreach ($this->getCc() as $user) { $message->addCc($user->getEmail()); } foreach ($this->getBcc() as $user) { $message->addBcc($user->getEmail()); } $message->addFrom($this->getFrom()); $message->setSubject($this->getSubject()); $transport = new Mail\Transport\Sendmail(); $transport->send($message); }
function setBcc($address) { foreach ((array) $address as $bcc) { $this->mail->addBcc($bcc); } }
public function sendEmail($template = 'message', $emailOptions = array()) { $emailOptions = array_merge($this->config, $emailOptions); $content = $this->renderEmail($template, $emailOptions); if ($emailOptions['debug']) { $displays = array(); foreach ($emailOptions as $key => $value) { if ($key !== 'message' && $key != 'attachments') { if (!is_object($value)) { $displays[] = $key . ': <strong>' . (is_array($value) ? implode(',', $value) : $value) . '</strong>'; } else { $displays[] = $key . ': <strong>OBJ</strong>'; } } } echo '<div style=" background-color: #444; padding: 50px; box-shadow: 1px 1px 10px rgba(0,0,0,0.8) inset; "> <div style=" width:80%; margin:10px auto; background-color:#ffffff; box-shadow:1px 2px 5px rgba(0,0,0,0.5); padding: 15px; " > ' . implode(' ; ', $displays) . ' </div> <div style=" width:80%; margin:10px auto; background-color:#ffffff; box-shadow:1px 2px 5px rgba(0,0,0,0.5); " >' . $content . '</div>' . (isset($emailOptions['attachments']) && $emailOptions['attachments'] ? '<div style=" width:80%; margin:10px auto; background-color:#ffffff; box-shadow:1px 2px 5px rgba(0,0,0,0.5); padding: 15px; " >Mit Anhang</div>' : '') . '</div>'; } $attachments = isset($emailOptions['attachments']) && $emailOptions['attachments'] && is_array($emailOptions['attachments']) ? $emailOptions['attachments'] : array(); $message = new Message(); $message->addTo($emailOptions['to']); $message->addFrom($emailOptions['from']); $message->setSubject($emailOptions['subject']); if ($emailOptions['bcc']) { $message->addBcc($emailOptions['bcc']); } if ($emailOptions['cc']) { $message->addCc($emailOptions['cc']); } if ($this->html) { // HTML part $htmlPart = new MimePart($content); $htmlPart->encoding = Mime::ENCODING_QUOTEDPRINTABLE; $htmlPart->type = "text/html; charset=UTF-8"; } // Plain text part $textPart = new MimePart(strip_tags($content)); $textPart->encoding = Mime::ENCODING_QUOTEDPRINTABLE; $textPart->type = "text/plain; charset=UTF-8"; $body = new MimeMessage(); if ($attachments) { // With attachments, we need a multipart/related email. First part // is itself a multipart/alternative message $content = new MimeMessage(); $content->addPart($textPart); if ($this->html) { $content->addPart($htmlPart); } $contentPart = new MimePart($content->generateMessage()); $contentPart->type = "multipart/alternative;\n boundary=\"" . $content->getMime()->boundary() . '"'; $body->addPart($contentPart); $messageType = 'multipart/related'; // Add each attachment foreach ($attachments as $thisAttachment) { $attachment = new MimePart($thisAttachment['buffer']); $attachment->filename = $thisAttachment['filename']; $attachment->type = Mime::TYPE_OCTETSTREAM; $attachment->encoding = Mime::ENCODING_BASE64; $attachment->disposition = Mime::DISPOSITION_ATTACHMENT; $body->addPart($attachment); } } else { // No attachments, just add the two textual parts to the body if ($this->html) { $body->setParts(array($textPart, $htmlPart)); $messageType = 'multipart/alternative'; } else { $body->setParts(array($textPart)); $messageType = 'text/plain'; } } // attach the body to the message and set the content-type $message->setBody($body); $message->getHeaders()->get('content-type')->setType($messageType); $message->setEncoding('UTF-8'); if ($emailOptions['send']) { if (isset($emailOptions['smtp']) && $emailOptions['smtp'] == 'google') { $transport = new SmtpTransport(); $options = new SmtpOptions(array('name' => 'casamail.com', 'host' => 'smtp.gmail.com', 'port' => 465, 'connection_class' => 'login', 'connection_config' => array('username' => $emailOptions['smtp_username'], 'password' => $emailOptions['smtp_password'], 'ssl' => 'ssl'))); $transport->setOptions($options); } else { $transport = new SendmailTransport(); } try { $transport->send($message); } catch (\Exception $e) { if (!get_class($transport) == 'Sendmail') { //try with postfix $transport = new SendmailTransport(); $transport->send($message); } } } else { echo '<h1>E-Mail <strong>NOT</strong> sent</h1>'; } return $content; }
public function previewAction() { $this->updateLayoutWithIdentity(); if ($this->disallowRankLessThan(User::RANK_GENERAL)) { return false; } $session = new SessionContainer('NightsWatch\\Announcement\\Create'); if (empty($session->title)) { $this->redirect()->toRoute('home', ['controller' => 'announcement', 'action' => 'create']); return false; } $announcement = new Announcement(); $announcement->title = $session->title; $announcement->content = $session->content; $announcement->user = $this->getIdentityEntity(); $announcement->timestamp = new \DateTime(); $announcement->lowestReadableRank = $session->rank; if ($this->getRequest()->isPost()) { $this->getEntityManager()->persist($announcement); $this->getEntityManager()->flush(); $userRepo = $this->getEntityManager()->getRepository('NightsWatch\\Entity\\User'); $criteria = Criteria::create()->where(Criteria::expr()->gte('rank', $announcement->lowestReadableRank)); /** @var User[] $users */ $users = $userRepo->matching($criteria); $mail = new Message(); $mail->setSubject('[NightsWatch] ' . $announcement->title); $mail->setFrom(new Address('*****@*****.**', $announcement->user->username)); $mail->setTo(new Address('*****@*****.**', 'Members')); $mail->setEncoding('UTF-8'); // Create a signature for email $title = trim($announcement->user->getTitleOrRank()); $announcement->content = $announcement->content .= "\n\n" . $announcement->user->username . " \n" . '*' . $title . '*'; $body = new MimeBody(); $bodyHtml = new MimePart($announcement->getParsedContent()); $bodyHtml->type = Mime::TYPE_HTML; $bodyText = new MimePart($announcement->content); $bodyText->type = Mime::TYPE_TEXT; $body->setParts([$bodyHtml, $bodyText]); $mail->setBody($body); foreach ($users as $user) { if ($user->emailNotifications & User::EMAIL_ANNOUNCEMENT > 0) { $mail->addBcc(new Address($user->email, $user->username)); } } $transport = new Sendmail(); $transport->send($mail); $session->title = ''; $this->redirect()->toRoute('id', ['controller' => 'announcement', 'id' => $announcement->id]); return false; } return new ViewModel(['announcement' => $announcement]); }
/** * @param string $emailAddress */ public function addBccRecipient($emailAddress) { $this->message->addBcc($emailAddress); }
public function sendMail($mailOptions = array()) { $this->_setMailOptions($mailOptions); $text = new Part($this->mailBody); $text->type = Mime::TYPE_HTML; $mailBodyParts = new MimeMessage(); $mailBodyParts->addPart($text); if (!empty($this->fileNames) && !empty($this->filePaths)) { foreach ($this->filePaths as $key => $filePath) { $file = new Part(file_get_contents($filePath)); $file->encoding = Mime::ENCODING_BASE64; $file->type = finfo_file(finfo_open(), $filePath, FILEINFO_MIME_TYPE); $file->disposition = Mime::DISPOSITION_ATTACHMENT; $file->filename = $this->fileNames[$key]; $mailBodyParts->addPart($file); } } $options = array(); if ($this->useSMTP === false) { $options = new SmtpOptions(array("name" => $this->smtpName, "host" => $this->smtpHost, "port" => $this->smtpPort)); } else { $options = new SmtpOptions(array('name' => $this->smtpName, 'host' => $this->smtpHost, 'port' => $this->smtpPort, 'connection_class' => $this->smtpConnectionClass, 'connection_config' => array('ssl' => $this->smtpSsl, 'username' => $this->smtpUsername, 'password' => $this->smtpPassword))); } $mail = new Message(); $mail->setBody($mailBodyParts); $mail->setFrom($this->mailFrom, $this->mailFromNickName); $mail->addTo($this->mailTo); if (!empty($this->mailCc)) { $mail->addCc($this->mailCc); } if (!empty($this->mailBcc)) { $mail->addBcc($this->mailBcc); } $mail->setSubject($this->mailSubject); $transport = new SmtpTransport(); $transport->setOptions($options); $emailLogInfo = array('email_to' => $this->mailTo, 'email_from' => $this->mailFrom, 'email_body' => $this->mailBody, 'email_subject' => $this->mailSubject, 'sender_type' => $this->mailSenderType); $emailSend = 0; try { $transport->send($mail); $emailSend = 1; } catch (\Exception $e) { $emailLogInfo['email_error'] = $e->getMessage(); throw $e; } return $emailSend; }
public function setBcc(Message $message, $bcc) { if (!empty($bcc)) { $bccs = explode(',', $bcc); foreach ($bccs as $email) { $message->addBcc(trim($email)); } } }
/** * 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; }
public function sendMail($api_url, $to, $from = '', $template = '', $content = array('subject' => '', 'message' => ''), $pattern = array(), $replace = array(), $attachment = false, $Bcc = '') { $mail = new Message(); $body = new MimeMessage(); $transport = new \Zend\Mail\Transport\Sendmail(); if ($template != '') { if ($template = $this->emailTemplate($api_url, $template)) { $html = new MimePart(preg_replace($pattern, $replace, $template['content'])); $subject = $template['subject']; } } else { if ($content['message'] != '') { $html = new MimePart(preg_replace($pattern, $replace, $content['message'])); $subject = $content['subject']; } } if ($html) { $html->type = "text/html"; if ($attachment != false) { $body->setParts(array($html, $attachment)); } else { $body->setParts(array($html)); } $from = $from != '' ? $from : $template['fromEmail']; try { $mail->setBody($body)->setFrom($from, 'Ovessence')->addTo($to, '')->setSubject(preg_replace($pattern, $replace, $subject)); if ($Bcc != '') { $mail->addBcc($Bcc, ''); } $transport->send($mail); return true; } catch (\Exception $ex) { //echo $ex->getMessage(); exit; return false; } } else { return false; } }
/** * 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; }
/** * @param $subject * @param $html * @param $plain * @param array $options * @param array $receivers * @param array $attachments * * @return Mail\Message */ protected function _assembleMailMessage($subject, $html, $plain, array $options, array $receivers, array $attachments = []) { $config = $this->_rendererConfig; $message = new Mail\Message(); $message->setEncoding('UTF-8'); // Sender if (isset($options['use_default_sender']) && $options['use_default_sender'] === true) { $fromEmail = isset($config['mail_from_email']) ? $config['mail_from_email'] : null; $fromName = isset($config['mail_from_name']) ? $config['mail_from_name'] : null; } else { $fromEmail = isset($options['sender_mail']) ? $options['sender_mail'] : null; $fromName = isset($options['sender_name']) ? $options['sender_name'] : null; } $addressListFrom = new Mail\AddressList(); $addressListFrom->add(new Mail\Address($fromEmail, isset($fromName) ? $fromName : null)); $message->setFrom($addressListFrom); // Receiver $addressListTo = new Mail\AddressList(); foreach ($receivers as $receiver) { $recEmail = isset($config['email_receiver_override']) ? $config['email_receiver_override'] : $receiver[0]; $recName = isset($receiver[1]) ? $receiver[1] : null; $addressListTo->add(new Mail\Address($recEmail, $recName)); } $message->setTo($addressListTo); if (isset($config['mail_bcc']) && is_array($config['mail_bcc'])) { foreach ($config['mail_bcc'] as $bccAddress) { // Avoid sending email copy to "to" AND bcc $found = false; foreach ($message->getTo() as $to) { if ($to->getEmail() == $bccAddress) { $found = true; break; } } if (!$found) { $addressListBcc = new Mail\AddressList(); $addressListBcc->add(new Mail\Address($bccAddress)); $message->addBcc($addressListBcc); } } } if (isset($config['subject_prefix']) && $config['subject_prefix'] != '') { $subject = $config['subject_prefix'] . $subject; } $message->setSubject($subject); if (empty($attachments)) { $message->setBody($html); $contentType = Mail\Header\ContentType::fromString('Content-Type: text/html; charset=utf-8'); $message->getHeaders()->addHeader($contentType); $contentTransferEncoding = Mail\Header\ContentTransferEncoding::fromString('Content-Transfer-Encoding: 8bit'); $message->getHeaders()->addHeader($contentTransferEncoding); } else { $html = new Mime\Part($html); $html->type = Mime\Mime::TYPE_HTML; $html->charset = 'UTF-8'; $html->disposition = Mime\Mime::DISPOSITION_INLINE; $html->encoding = Mime\Mime::ENCODING_QUOTEDPRINTABLE; $body = new Mime\Message(); $body->addPart($html); foreach ($attachments as $attachmentData) { if (isset($attachmentData['file_path']) && is_readable($attachmentData['file_path'])) { $attachmentData['file_data'] = file_get_contents($attachmentData['file_path']); } if (isset($attachmentData['file_data']) && !empty($attachmentData['file_data'])) { $attachment = new Mime\Part($attachmentData['file_data']); $attachment->type = $attachmentData['mime_type']; $attachment->filename = $attachmentData['name']; $attachment->disposition = Mime\Mime::DISPOSITION_ATTACHMENT; $attachment->encoding = Mime\Mime::ENCODING_BASE64; $body->addPart($attachment); } } $message->setBody($body); } return $message; }
public function send(Message $message, array $attachments = array()) { if ($this->getConfiguration()->getSendAllMailsToBcc() !== null) { $message->addBcc($this->getConfiguration()->getSendAllMailsToBcc()); } if ($this->getConfiguration()->getSendAllMailsTo() != null) { $message->setTo($this->getConfiguration()->getSendAllMailsTo()); } $content = $message->getBody(); $bodyMessage = new \Zend\Mime\Message(); $multiPartContentMessage = new \Zend\Mime\Message(); $text = new Part(strip_tags($content)); $text->type = Mime::TYPE_TEXT; $text->encoding = Mime::ENCODING_QUOTEDPRINTABLE; $multiPartContentMessage->addPart($text); $html = new Part($content); $html->type = Mime::TYPE_HTML; $html->encoding = Mime::ENCODING_QUOTEDPRINTABLE; $html->charset = 'utf-8'; $multiPartContentMessage->addPart($html); $multiPartContentMimePart = new Part($multiPartContentMessage->generateMessage()); $multiPartContentMimePart->charset = 'UTF-8'; $multiPartContentMimePart->type = 'multipart/alternative'; $multiPartContentMimePart->boundary = $multiPartContentMessage->getMime()->boundary(); $bodyMessage->addPart($multiPartContentMimePart); foreach ($attachments as $attachment) { $bodyMessage->addPart($attachment); } $message->setBody($bodyMessage); $message->setEncoding("UTF-8"); $this->transport->send($message); }