Пример #1
0
 function send()
 {
     //第一步: 设置相关的headers
     //1.设置邮件的Content-Type,要不然网站的消息内容里面的html标签会被当做纯文本处理
     $smtpHeaderContentType = new SmtpHeaderContentType();
     $smtpHeaderContentType->setType('text/html');
     //2.设置编码集并添加Content-Type
     $headers = new SmtpHeaders();
     $headers->setEncoding('utf-8');
     $headers->addHeader($smtpHeaderContentType);
     //第二步:设置消息的相关
     $message = new SmtpMessage();
     $message->setHeaders($headers);
     $message->addTo($this->mailTo)->addFrom($this->mailFrom)->setSubject($this->subject)->setBody($this->body);
     //邮件的内容
     //第三步:设置Smtp的相关链接参数
     $smtpOptions = new SmtpOptions();
     $smtpOptions->setHost($this->host)->setPort($this->port)->setConnectionClass('login')->setConnectionConfig(array('username' => $this->username, 'password' => $this->password, 'ssl' => 'ssl'));
     //第四步:加载配置,发送消息
     $smtpTransport = new SmtpTransport();
     $smtpTransport->setOptions($smtpOptions);
     //加载配置
     $smtpTransport->send($message);
     //发送消息
 }
Пример #2
0
 public function testSendMinimalMail()
 {
     $headers = new Headers();
     $headers->addHeaderLine('Date', 'Sun, 10 Jun 2012 20:07:24 +0200');
     $message = new Message();
     $message->setHeaders($headers)->setSender('*****@*****.**', 'Ralph Schindler')->setBody('testSendMailWithoutMinimalHeaders')->addTo('*****@*****.**', 'ZF DevTeam');
     $expectedMessage = "RSET\r\n" . "MAIL FROM:<*****@*****.**>\r\n" . "DATA\r\n" . "Date: Sun, 10 Jun 2012 20:07:24 +0200\r\n" . "Sender: Ralph Schindler <*****@*****.**>\r\n" . "To: ZF DevTeam <*****@*****.**>\r\n" . "\r\n" . "testSendMailWithoutMinimalHeaders\r\n" . ".\r\n";
     $this->transport->send($message);
     $this->assertEquals($expectedMessage, $this->connection->getLog());
 }
Пример #3
0
 public function testSendEscapedEmail()
 {
     $headers = new Headers();
     $headers->addHeaderLine('Date', 'Sun, 10 Jun 2012 20:07:24 +0200');
     $message = new Message();
     $message->setHeaders($headers)->setSender('*****@*****.**', 'Ralph Schindler')->setBody("This is a test\n.")->addTo('*****@*****.**', 'ZF DevTeam');
     $expectedMessage = "EHLO localhost\r\n" . "MAIL FROM:<*****@*****.**>\r\n" . "DATA\r\n" . "Date: Sun, 10 Jun 2012 20:07:24 +0200\r\n" . "Sender: Ralph Schindler <*****@*****.**>\r\n" . "To: ZF DevTeam <*****@*****.**>\r\n" . "\r\n" . "This is a test\r\n" . "..\r\n" . ".\r\n";
     $this->transport->send($message);
     $this->assertEquals($expectedMessage, $this->connection->getLog());
 }
Пример #4
0
 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.");
 }
Пример #5
0
 public function send(ZendMessage $message = null)
 {
     $message = $message ? $message : $this->message;
     if (!$message) {
         throw new Exception\InvalidArgumentException(sprintf('Mail message not set'));
     }
     $transports = $this->transports;
     if (!$transports) {
         throw new Exception\InvalidArgumentException(sprintf('Mail transport not set'));
     }
     $conflictTransports = $this->conflictTransports;
     $transportTypes = array_keys($transports);
     if (count(array_intersect($conflictTransports, $transportTypes)) > 1) {
         throw new Exception\InvalidArgumentException(sprintf('Mail transports conflicted by %s', implode(",", array_intersect($conflictTransports, $transportTypes))));
     }
     $zendMessage = new ZendMessage();
     $zendMessage->setBody($message->getBody());
     $zendMessage->setHeaders($message->getHeaders());
     $zendMessage->setEncoding($message->getEncoding());
     $message = $zendMessage;
     foreach ($transports as $transportType => $transport) {
         $transport->send($message);
     }
 }
Пример #6
0
 /**
  * @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);
 }
Пример #7
0
 public function mailAdd($version, $id, $srcNodeId, $srcUserNickname, $dstNodeId, $subject, $text, $checksum, $relayCount, $encryptionMode, $status, $timeCreated, $timeReceived)
 {
     $this->log->info('mail add: ' . $id);
     $this->log->info('subject: ' . $subject);
     $this->log->info('from: ' . $srcNodeId);
     $this->log->info('nick: ' . $srcUserNickname);
     $headers = new ZendMailHeaders();
     $headers->addHeaderLine('Date', date('r', $timeReceived));
     $headers->addHeaderLine('X-Version', $version);
     $headers->addHeaderLine('X-Id', $id);
     $headers->addHeaderLine('X-Checksum', $checksum);
     $headers->addHeaderLine('X-RelayCount', $relayCount);
     $headers->addHeaderLine('X-EncrptionMode', $encryptionMode);
     $headers->addHeaderLine('X-Status', $status);
     $headers->addHeaderLine('X-TimeCreated', $timeCreated);
     $headers->addHeaderLine('X-TimeReceived', $timeReceived);
     $message = new ZendMailMessage();
     $message->setHeaders($headers);
     $message->addFrom($srcNodeId . '@phpchat.fox21.at', $srcUserNickname);
     $message->addTo($dstNodeId . '@phpchat.fox21.at');
     $message->setSubject($subject);
     $message->setBody($text);
     $this->server->addMail($message);
 }
Пример #8
0
 public function read()
 {
     // Setup filter array
     $filter_arr = array();
     // TO
     if (!empty($this->to_filter)) {
         $filter_arr[] = "TO " . $this->to_filter;
     }
     // FROM
     if (!empty($this->from_filter)) {
         $filter_arr[] = "FROM " . $this->from_filter;
     }
     // CC
     if (!empty($this->cc_filter)) {
         $filter_arr[] = "CC " . $this->cc_filter;
     }
     // SUBJECT
     if (!empty($this->subject_filter)) {
         $filter_arr[] = "SUBJECT " . $this->subject_filter;
     }
     // BODY
     if (!empty($this->body_filter)) {
         $filter_arr[] = "BODY " . $this->body_filter;
     }
     // UNSEEN
     $filter_arr[] = "UNSEEN";
     // Connect and fetch emails
     $this->w->Log->info("Connecting to mail server");
     $mail = $this->connectToMail();
     if (!empty($mail)) {
         $this->w->Log->info("Getting messages with filter: " . json_encode($filter_arr));
         $results = $mail->protocol->search($filter_arr);
         if (count($results) > 0) {
             $this->w->Log->info("Found " . count($results) . " messages, looping through");
             foreach ($results as $messagenum) {
                 $rawmessage = "";
                 $message = $mail->getMessage($messagenum);
                 $zend_message = new Zend_Mail_Message();
                 $zend_message->setHeaders($message->getHeaders());
                 $zend_message->setBody($message->getContent());
                 $email = new EmailStructure();
                 $email->to = $message->to;
                 $email->from = $message->from;
                 if (isset($message->cc)) {
                     $email->cc = $message->cc;
                 }
                 $email->subject = $message->subject;
                 //$email->body["html"] = $message->getContent();
                 $rawmessage .= $zend_message->toString();
                 // Create messages
                 $channel_message = new ChannelMessage($this->w);
                 $channel_message->channel_id = $this->channel_id;
                 $channel_message->message_type = "email";
                 // $channel_message->attachment_id = $attachment_id;
                 $channel_message->is_processed = 0;
                 $channel_message->insert();
                 // Save raw email
                 $attachment_id = $this->w->File->saveFileContent($channel_message, $rawmessage, str_replace(".", "", microtime()) . ".txt", "channel_email_raw", "text/plain");
                 if ($message->isMultipart()) {
                     foreach (new RecursiveIteratorIterator($message) as $part) {
                         try {
                             $contentType = strtok($part->contentType, ';');
                             switch ($contentType) {
                                 case "text/plain":
                                     $email->body["plain"] = trim($part->__toString());
                                     break;
                                 case "text/html":
                                     $email->body["html"] = trim($part->__toString());
                                     break;
                                 default:
                                     // Is probably an attachment so just save it
                                     $transferEncoding = $part->getHeader("Content-Transfer-Encoding")->getFieldValue("transferEncoding");
                                     $content_type_header = $part->getHeader("Content-Type");
                                     // Name is stored under "parameters" in an array
                                     $nameArray = $content_type_header->getParameters();
                                     $this->w->File->saveFileContent($channel_message, $transferEncoding == "base64" ? base64_decode(trim($part->__toString())) : trim($part->__toString()), !empty($nameArray["name"]) ? $nameArray["name"] : "attachment" . time(), "channel_email_attachment", $contentType);
                             }
                         } catch (Zend_Mail_Exception $e) {
                             // Ignore
                         }
                     }
                 }
                 $attachment_id = $this->w->File->saveFileContent($channel_message, serialize($email), "email.txt", "channel_email_raw", "text/plain");
             }
         } else {
             $this->w->Log->info("No new messages found");
         }
     }
 }
Пример #9
0
 /**
  * Compose headers
  *
  * @param   \Zend\Mail\Headers  $headers
  * @return  \Zork\Mail\Message
  */
 public function setHeaders(Headers $headers)
 {
     $headers->addHeaderLine('User-Agent', static::USER_AGENT)->addHeaderLine('X-Mailer', static::USER_AGENT);
     return parent::setHeaders($headers);
 }
 /**
  * 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;
 }