/**
  * 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;
 }
Example #2
0
 /**
  * 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;
 }