/** * Parse the current message * * Return the parse time * * @return number */ public function parse() { $start = microtime(true); $this->getResource()->flagAsParsed($this); try { /* @var $message Mzax_Bounce_Message */ $message = new Mzax_Bounce_Message($this->getRawData()); $message->setHeader('created_at', $this->getCreatedAt()); $result = self::getBounceDecoder()->inspect($message); $result = new Varien_Object($result); $update = array('is_parsed' => 1, 'email' => $result->getRecipient(), 'sent_at' => $result->getSentAt(), 'status_code' => $result->getStatus(), 'is_arf' => (int) $result->getArf(), 'is_autoreply' => (int) $result->getAutoreply(), 'arf_type' => $result->getFeedbackType(), 'recipient_id' => $result->getRecipientId(), 'store_id' => $result->getStoreId(), 'campaign_id' => $result->getCampaignId()); $status = $result->getStatus(); if ($status) { if (strpos($status, '4.') === 0) { $update['type'] = self::BOUNCE_SOFT; } if (strpos($status, '5.') === 0) { $update['type'] = self::BOUNCE_HARD; } } else { if ($result->getAutoreply()) { $update['type'] = self::AUTOREPLY; } else { if ($result->getUnsubscribe()) { $update['type'] = self::UNSUBSCRIBE; /* @see $subscriber Mzax_Emarketing_Helper_Newsletter */ Mage::helper('mzax_emarketing/newsletter')->unsubscribe($result->getRecipient(), $result->getStoreId(), false); } else { $update['type'] = self::NO_BOUNCE; } } } if ($part = $message->findMinePart(Zend_Mime::TYPE_TEXT)) { $text = $part->getDecodedContent(); } else { $text = $message->getDecodedContent(); } if ($pos = strpos($text, '---')) { $text = substr($text, 0, $pos); } $text = Mage::helper('core/string')->stripTags($text); $text = Mage::helper('core/string')->truncate($text, 512); $update['message'] = $text; $update['subject'] = $message->getSubject(); $this->addData($update); $this->save(); Mage::dispatchEvent('mzax_emarketing_inbox_email_parse', array('email' => $this, 'message' => $message, 'result' => $result)); if ($this->shouldForward()) { $this->forward($message); } // unsubscribe hard bounces if (!$this->getNoUnsubscribe() && $this->getType() == self::BOUNCE_HARD && Mage::getStoreConfigFlag('mzax_emarketing/inbox/unsubscribe_hard_bounce', $this->getStore())) { Mage::getSingleton('mzax_emarketing/medium_email')->unsubscribe($this->getEmail(), sprintf('%s bounce, email %s', $status, $this->getId())); } } catch (Exception $e) { if (Mage::getIsDeveloperMode()) { throw $e; } Mage::logException($e); } return microtime(true) - $start; }