/** * Check if email was added to queue for requested recipients * * @param Mage_Core_Model_Email_Queue $queue * * @return bool */ public function wasEmailQueued(Mage_Core_Model_Email_Queue $queue) { $readAdapter = $this->_getReadAdapter(); $select = $readAdapter->select()->from(array('recips' => $this->getTable('core/email_recipients')), array('recipient_email', 'recipient_name', 'email_type'))->join(array('queue' => $this->getMainTable()), 'queue.message_id = recips.message_id', array())->where('queue.entity_id =? ', $queue->getEntityId())->where('queue.entity_type =? ', $queue->getEntityType())->where('queue.event_type =? ', $queue->getEventType())->where('queue.message_body_hash =? ', md5($queue->getMessageBody())); $existingRecipients = $readAdapter->fetchAll($select); if ($existingRecipients) { $newRecipients = $queue->getRecipients(); $oldEmails = $newEmails = array(); foreach ($existingRecipients as $recipient) { $oldEmails[$recipient['recipient_email']] = array($recipient['recipient_email'], $recipient['recipient_name'], $recipient['email_type']); } unset($recipient); foreach ($newRecipients as $recipient) { list($email, $name, $type) = $recipient; $newEmails[$email] = array($email, $name, $type); } $diff = array_diff_key($newEmails, $oldEmails); if (sizeof($diff) > 0) { $queue->clearRecipients(); foreach ($diff as $recipient) { list($email, $name, $type) = $recipient; $queue->addRecipients($email, $name, $type); } return false; } return true; } return false; }
/** * Send all messages in a queue * * @return Mage_Core_Model_Email_Queue */ public function send() { /** @var Newsman_Newsletter_Helper_Smtp $_helper */ $_helper = Mage::helper('newsman_newsletter/smtp'); if (!$_helper->isEnabled()) { return parent::send(); } /** @var $collection Mage_Core_Model_Resource_Email_Queue_Collection */ $collection = Mage::getModel('core/email_queue')->getCollection()->addOnlyForSendingFilter()->setPageSize(self::MESSAGES_LIMIT_PER_CRON_RUN)->setCurPage(1)->load(); ini_set('SMTP', $_helper->getHost()); ini_set('smtp_port', $_helper->getPort()); /** @var $message Mage_Core_Model_Email_Queue */ foreach ($collection as $message) { if ($message->getId()) { $parameters = new Varien_Object($message->getMessageParameters()); if ($parameters->getReturnPathEmail() !== null) { $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $parameters->getReturnPathEmail()); Zend_Mail::setDefaultTransport($mailTransport); } $mailer = new Zend_Mail('utf-8'); foreach ($message->getRecipients() as $recipient) { list($email, $name, $type) = $recipient; switch ($type) { case self::EMAIL_TYPE_BCC: $mailer->addBcc($email, '=?utf-8?B?' . base64_encode($name) . '?='); break; case self::EMAIL_TYPE_TO: case self::EMAIL_TYPE_CC: default: $mailer->addTo($email, '=?utf-8?B?' . base64_encode($name) . '?='); break; } } if ($parameters->getIsPlain()) { $mailer->setBodyText($message->getMessageBody()); } else { $mailer->setBodyHTML($message->getMessageBody()); } $mailer->setSubject('=?utf-8?B?' . base64_encode($parameters->getSubject()) . '?='); $mailer->setFrom($parameters->getFromEmail(), $parameters->getFromName()); if ($parameters->getReplyTo() !== null) { $mailer->setReplyTo($parameters->getReplyTo()); } if ($parameters->getReturnTo() !== null) { $mailer->setReturnPath($parameters->getReturnTo()); } try { $mailer->send(); unset($mailer); $message->setProcessedAt(Varien_Date::formatDate(true)); $message->save(); } catch (Exception $e) { unset($mailer); $oldDevMode = Mage::getIsDeveloperMode(); Mage::setIsDeveloperMode(true); Mage::logException($e); Mage::setIsDeveloperMode($oldDevMode); return false; } } } return $this; }