예제 #1
0
 /**
  * @param \Common\Entity\Email $email
  * @param \Zend\Mail\Storage\Message $part
  */
 protected function getState(ZendMessage $part)
 {
     $state = null;
     // state auto reply
     if (is_null($state) && !empty($part->getHeaders()) && isset($part->autosubmitted)) {
         $state = State::STATE_AUTO_REPLY;
     }
     // state delivery notice
     if (!empty($part->getHeaders()) && isset($part->contenttype)) {
         $dummy = explode(';', $part->contentType);
         if (stripos($dummy[0], 'delivery-status') !== FALSE) {
             $state = State::STATE_DELIVERY_NOTICE;
         }
     }
     // state spam
     if (is_null($state) && !empty($part->getHeaders()) && isset($part->subject)) {
         if (stripos($part->subject, 'spam-suspect') !== FALSE) {
             $state = State::STATE_SPAM;
         }
     }
     // state paypal
     $from = $this->message->getAddresses()->filter(function ($entry) {
         return $entry->getType() == Address::TYPE_FROM;
     })->first();
     if (strcasecmp($from->getAddress(), '*****@*****.**') === 0) {
         $state = State::STATE_PAYPAL;
     }
     // state ups
     $from = $this->message->getAddresses()->filter(function ($entry) {
         return $entry->getType() == Address::TYPE_FROM;
     })->first();
     if (strcasecmp($from->getAddress(), '*****@*****.**') === 0) {
         $state = State::STATE_UPS;
     }
     // state new
     if (is_null($state)) {
         $state = State::STATE_NEW;
     }
     if ($this->message->getStates()->count() > 0) {
         $currentState = $this->message->getStates()[0]->getState();
         if ($currentState !== State::STATE_NEW) {
             return;
         }
         $stateObj = $this->message->getStates()[0];
     } else {
         $stateObj = new State();
     }
     $stateObj->setMessage($this->message)->setState($state);
     $this->message->getStates()->add($stateObj);
 }
예제 #2
0
 public function testEmptyHeader()
 {
     $message = new Message(array());
     $this->assertEquals(array(), $message->getHeaders());
     $message = new Message(array());
     $subject = null;
     try {
         $subject = $message->subject;
     } catch (Exception\InvalidArgumentException $e) {
         // ok
     }
     if ($subject) {
         $this->fail('no exception raised while getting header from empty message');
     }
 }
예제 #3
0
 /**
  * @group ZF-5209
  */
 public function testCheckingHasHeaderFunctionality()
 {
     $message = new Message(array('headers' => array('subject' => 'foo')));
     $this->assertTrue($message->getHeaders()->has('subject'));
     $this->assertTrue(isset($message->subject));
     $this->assertTrue($message->getHeaders()->has('SuBject'));
     $this->assertTrue(isset($message->suBjeCt));
     $this->assertFalse($message->getHeaders()->has('From'));
 }
예제 #4
0
 /**
  * convert raw mail to common array format.
  *
  * @param ReceiveMessage $rawMail
  *
  * common mail array format
  *
  * @return null|MailPart
  */
 private function parseMailParts(ReceiveMessage $rawMail)
 {
     $rawMailHeaders = $rawMail->getHeaders();
     $contentType = isset($rawMail->content_type) ? $rawMail->getHeaderField('Content-Type') : 'no_content_type';
     $part = $this->configurePart($contentType);
     if (is_null($part)) {
         //            prn('first');
         return $part;
     }
     if ($rawMail->isMultipart()) {
         $partResult = [];
         try {
             foreach ($rawMail as $rawPart) {
                 //                    prn($rawPart);
                 $tres = $this->parseMailParts($rawPart);
                 //                    prn($tres);
                 if (!isset($tres)) {
                     continue;
                 }
                 $partResult[] = $tres;
             }
         } catch (\Zend\Mail\Header\Exception\InvalidArgumentException $exc) {
             //                prn($exc->getMessage());
         }
         //            prn($partResult);
         $part->setContent($partResult);
         $part->setHeaders($rawMailHeaders);
     } else {
         $isAttachment = in_array(explode('/', $contentType)[0], $this::$attachmentTypes);
         $partResult = $rawMail->getContent();
         if (in_array('Content-Transfer-Encoding', array_keys($rawMailHeaders->toArray())) && isset($partResult)) {
             $partResult = $this->decode($partResult, $rawMail->contentTransferEncoding);
             $rawMailHeaders->removeHeader('Content-Transfer-Encoding');
         }
         if ($isAttachment) {
             switch ($this->attachmentProcessingType) {
                 case self::AttachmentNone:
                     //                        prn('second');
                     return null;
                     break;
                 case self::AttachmentInfo:
                     $partResult = null;
                     break;
                 case self::AttachmentFiles:
                     break;
             }
         } else {
             try {
                 $mailCharset = $rawMail->getHeaderField('content-type', 'charset');
             } catch (\Exception $ex) {
                 $mailCharset = null;
             }
             $partResult = $this->setMailEncoding($partResult, $mailCharset);
         }
     }
     $part->setContent($partResult);
     $part->setHeaders($rawMailHeaders);
     //        prn('third');
     return $part;
 }