/** * @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); }
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'); } }
/** * @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')); }
/** * 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; }