/**
  * Fetch messages that should be processed
  * @return array|Message[]
  * @throws MessageProcessingException
  */
 public function fetchMessagesToProcess()
 {
     $messages = array();
     try {
         foreach ($this->computeMessageIdsToProcess() as $uniqueMessageId) {
             /** @var \Zend\Mail\Storage\Message $message */
             $imapMessage = $this->zendImapStorage->getMessage($this->zendImapStorage->getNumberByUniqueId($uniqueMessageId));
             $headers = $imapMessage->getHeaders();
             $messageId = $this->processMessageId($headers);
             $messageSubject = $this->processSubject($headers);
             $messageContent = $this->processContent($imapMessage);
             $messageFrom = $this->processFrom($headers);
             $messageTo = $this->processTo($headers);
             $messageReference = $this->processMessageReference($headers);
             $messageAttachments = $this->processAttachments($imapMessage);
             $isFailed = $this->isFailed($headers);
             $isSystem = $this->isSystem($headers);
             $recipients = $this->processRecipients($headers);
             $messages[] = new Message($uniqueMessageId, $messageId, $messageSubject, $messageContent, $messageFrom, $messageTo, $messageReference, $messageAttachments, $isFailed, $isSystem, $recipients);
         }
     } catch (\Exception $e) {
         throw new MessageProcessingException($e->getMessage());
     }
     return $messages;
 }
Пример #2
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.");
 }
Пример #3
0
 public function testSetFlags()
 {
     $mail = new Storage\Imap($this->_params);
     $mail->setFlags(1, array(Storage::FLAG_SEEN));
     $message = $mail->getMessage(1);
     $this->assertTrue($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertFalse($message->hasFlag(Storage::FLAG_FLAGGED));
     $mail->setFlags(1, array(Storage::FLAG_SEEN, Storage::FLAG_FLAGGED));
     $message = $mail->getMessage(1);
     $this->assertTrue($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertTrue($message->hasFlag(Storage::FLAG_FLAGGED));
     $mail->setFlags(1, array(Storage::FLAG_FLAGGED));
     $message = $mail->getMessage(1);
     $this->assertFalse($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertTrue($message->hasFlag(Storage::FLAG_FLAGGED));
     $mail->setFlags(1, array('myflag'));
     $message = $mail->getMessage(1);
     $this->assertFalse($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertFalse($message->hasFlag(Storage::FLAG_FLAGGED));
     $this->assertTrue($message->hasFlag('myflag'));
     try {
         $mail->setFlags(1, array(Storage::FLAG_RECENT));
     } catch (\Exception $e) {
         return;
         // ok
     }
     $this->fail('should not be able to set recent flag');
 }
Пример #4
0
 public function testSetFlags()
 {
     $mail = new Storage\Imap($this->_params);
     $mail->setFlags(1, array(Storage::FLAG_SEEN));
     $message = $mail->getMessage(1);
     $this->assertTrue($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertFalse($message->hasFlag(Storage::FLAG_FLAGGED));
     $mail->setFlags(1, array(Storage::FLAG_SEEN, Storage::FLAG_FLAGGED));
     $message = $mail->getMessage(1);
     $this->assertTrue($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertTrue($message->hasFlag(Storage::FLAG_FLAGGED));
     $mail->setFlags(1, array(Storage::FLAG_FLAGGED));
     $message = $mail->getMessage(1);
     $this->assertFalse($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertTrue($message->hasFlag(Storage::FLAG_FLAGGED));
     $mail->setFlags(1, array('myflag'));
     $message = $mail->getMessage(1);
     $this->assertFalse($message->hasFlag(Storage::FLAG_SEEN));
     $this->assertFalse($message->hasFlag(Storage::FLAG_FLAGGED));
     $this->assertTrue($message->hasFlag('myflag'));
     $this->setExpectedException('Zend\\Mail\\Storage\\Exception\\InvalidArgumentException');
     $mail->setFlags(1, array(Storage::FLAG_RECENT));
 }