public function send()
 {
     $_helper = Mage::helper('smtppro');
     // If it's not enabled, just return the parent result.
     if (!$_helper->isEnabled()) {
         return parent::send();
     }
     if (Mage::getStoreConfigFlag('system/smtp/disable')) {
         return $this;
     }
     $mail = new Zend_Mail();
     if (strtolower($this->getType()) == 'html') {
         $mail->setBodyHtml($this->getBody());
     } else {
         $mail->setBodyText($this->getBody());
     }
     $mail->setFrom($this->getFromEmail(), $this->getFromName())->addTo($this->getToEmail(), $this->getToName())->setSubject($this->getSubject());
     $transport = new Varien_Object();
     // for observers to set if required
     Mage::dispatchEvent('aschroder_smtppro_before_send', array('mail' => $mail, 'email' => $this, 'transport' => $transport));
     if ($transport->getTransport()) {
         // if set by an observer, use it
         $mail->send($transport->getTransport());
     } else {
         $mail->send();
     }
     Mage::dispatchEvent('aschroder_smtppro_after_send', array('to' => $this->getToName(), 'subject' => $this->getSubject(), 'template' => "n/a", 'html' => strtolower($this->getType()) == 'html', 'email_body' => $this->getBody()));
     return $this;
 }
 /**
  * On controller redirects, check the target URL and set to home page
  * if it would otherwise go to a getBlock URL
  *
  * @param  Varien_Object $eventObject
  * @return null
  */
 public function checkRedirectUrl($eventObject)
 {
     $esiHelper = Mage::helper('turpentine/esi');
     $url = $eventObject->getTransport()->getUrl();
     $referer = Mage::helper('core/http')->getHttpReferer();
     $dummyUrl = $esiHelper->getDummyUrl();
     $reqUenc = Mage::helper('core')->urlDecode(Mage::app()->getRequest()->getParam('uenc'));
     if ($this->_checkIsEsiUrl($url)) {
         if ($this->_checkIsNotEsiUrl($reqUenc) && Mage::getBaseUrl() == $url) {
             $newUrl = $this->_fixupUencUrl($reqUenc);
         } elseif ($this->_checkIsNotEsiUrl($referer)) {
             $newUrl = $referer;
         } else {
             $newUrl = $dummyUrl;
         }
         // TODO: make sure this actually looks like a URL
         $eventObject->getTransport()->setUrl($newUrl);
     }
     if ($eventObject->getTransport()->getUrl() != $url) {
         Mage::helper('turpentine/debug')->logDebug('Detected redirect to ESI URL, changing: %s => %s', $url, $eventObject->getTransport()->getUrl());
     }
 }
 public function indexAction()
 {
     $_helper = Mage::helper('smtppro');
     $_helper->log($_helper->__("Running SMTP Pro Self Test"));
     $success = true;
     $websiteModel = Mage::app()->getWebsite($this->getRequest()->getParam('website'));
     $this->TEST_EMAIL = Mage::getStoreConfig('trans_email/ident_general/email', $websiteModel->getId());
     $msg = $_helper->__("SMTP Pro Self Test Results");
     if (!$_helper->isEnabled()) {
         $msg = $msg . "<br/>" . $_helper->__("Extension disabled, cannot run test.");
         $_helper->log($_helper->__("Extension disabled, cannot run test."));
         Mage::getSingleton('adminhtml/session')->addError($msg);
         $this->_redirectReferer();
         return;
     }
     // check the re-writes have not clashed
     $_helper->log($_helper->__("Checking config re-writes have not clashed."));
     $email_rewrite = "" . Mage::getConfig()->getNode('global/models/core/rewrite/email');
     $email_template_rewrite = "" . Mage::getConfig()->getNode('global/models/core/rewrite/email_template');
     if ($this->checkRewrite($this->EXPECTED_REWRITE_CLASSES["email_rewrite"], $email_rewrite)) {
         $success = false;
         $msg = $msg . "<br/>" . $_helper->__("Detected overwrite conflict: %s", $email_rewrite);
         $_helper->log($_helper->__("Detected overwrite conflict: %s", $email_rewrite));
     }
     if ($this->checkRewrite($this->EXPECTED_REWRITE_CLASSES["email_template_rewrite"], $email_template_rewrite)) {
         $success = false;
         $msg = $msg . "<br/>" . $_helper->__("Detected overwrite conflict: %s", $email_template_rewrite);
         $_helper->log($_helper->__("Detected overwrite conflict: %s", $email_template_rewrite));
     }
     // Hosts often block SMTP outbound connections, so we check for that here
     $transport = $_helper->getTransport($websiteModel->getId());
     if (is_subclass_of($transport, 'Aschroder_SMTPPro_Model_Transports_Basesmtp')) {
         $_helper->log($_helper->__("Raw connection test for SMTP options."));
         $fp = false;
         try {
             $fp = fsockopen($transport->getHost(), $transport->getPort(), $errno, $errstr, 15);
         } catch (Exception $e) {
             // An error will be reported below.
         }
         Mage::helper('smtppro')->log($_helper->__("Complete"));
         if (!$fp) {
             $success = false;
             $_helper->log($_helper->__("Failed to connect to SMTP server. Reason: ") . $errstr . "(" . $errno . ")");
             $msg = $msg . "<br/>" . $_helper->__("Failed to connect to SMTP server. Reason: ") . $errstr . "(" . $errno . ")";
             $msg = $msg . "<br/>" . $_helper->__("This extension requires an outbound SMTP connection on port: ") . $transport->getPort();
         } else {
             $_helper->log($_helper->__("Connection to Host SMTP server successful"));
             $msg = $msg . "<br/>" . $_helper->__("Connection to Host SMTP server successful.");
             fclose($fp);
         }
     } else {
         $_helper->log($_helper->__("Skipping raw connection test for non-SMTP options."));
     }
     $to = Mage::getStoreConfig('contacts/email/recipient_email', $websiteModel->getId());
     $mail = new Zend_Mail();
     $sub = $_helper->__("Test Email From SMTP Pro Magento Extension");
     $body = "Hi,\n\n" . "This is a Test Email from your Magento Store. If you are seeing this email then your " . "SMTPPro settings are correct! \n\n" . "For more information about this extension and " . "tips for using it please visit magesmtppro.com or contact me, support@aschroder.com.\n\n" . "Regards,\nAshley";
     $mail->addTo($to)->setFrom($this->TEST_EMAIL)->setSubject($sub)->setBodyText($body);
     $_helper->log($_helper->__("Actual email sending test..."));
     $msg = $msg . "<br/>" . $_helper->__("Sending test email to your contact form address: ") . $to . $_helper->__(" from: {$this->TEST_EMAIL}. ");
     try {
         $transport = new Varien_Object();
         // for observers to set if required
         Mage::dispatchEvent('aschroder_smtppro_before_send', array('mail' => $mail, 'email' => $this, 'transport' => $transport));
         $emailTransport = $transport->getTransport();
         if (!empty($emailTransport)) {
             $mail->send($emailTransport);
             Mage::dispatchEvent('aschroder_smtppro_after_send', array('to' => $to, 'template' => "Email Self Test", 'subject' => $sub, 'html' => false, 'email_body' => $body));
             $msg = $msg . "<br/>" . $_helper->__("Test email was sent successfully.");
             $_helper->log($_helper->__("Test email was sent successfully"));
         } else {
             $success = false;
             $_helper->log($_helper->__("Failed to find transport for test."));
             $msg = $msg . "<br/>" . $_helper->__("Failed to find transport for test.");
         }
     } catch (Exception $e) {
         $success = false;
         $msg = $msg . $_helper->__("Unable to send test email.");
         if ($help = $this->knowError($e->getMessage())) {
             $msg = $msg . "<br/>" . $help;
         } else {
             $msg = $msg . "<br/>" . $_helper->__("Exception message was: %s", $e->getMessage());
             $msg = $msg . "<br/>" . $_helper->__("Please check the user guide for frequent error messages and their solutions.");
         }
         $_helper->log($_helper->__("Test email was not sent successfully: %s", $e->getMessage()));
         $_helper->log($_helper->__("See exception log for more details."));
         Mage::logException($e);
     }
     $_helper->log($_helper->__("Checking that a template exists for the default locale and that email communications are enabled..."));
     try {
         $mailTemplate = Mage::getModel('core/email_template');
         $testTemplateId = Mage::getStoreConfig(self::XML_PATH_TEST_TEMPLATE);
         if (is_numeric($testTemplateId)) {
             $mailTemplate->load($testTemplateId);
         } else {
             $localeCode = Mage::getStoreConfig('general/locale/code');
             $mailTemplate->loadDefault($testTemplateId, $localeCode);
         }
         $mailTemplate->setSenderName("Test Name");
         $mailTemplate->setSenderEmail("*****@*****.**");
         if ($mailTemplate->isValidForSend()) {
             $msg = $msg . "<br/>" . $_helper->__("Default templates exist.");
             $msg = $msg . "<br/>" . $_helper->__("Email communications are enabled.");
             $_helper->log($_helper->__("Default templates exist and email communications are enabled."));
         } else {
             $success = false;
             $msg = $msg . "<br/>" . $_helper->__("Could not find default template, or template not valid, or email communications disabled in Advanced > System settings.");
             $msg = $msg . "<br/>" . $_helper->__("Please check that you have templates in place for your emails. These are in app/locale, or custom defined in System > Transaction Emails. Also check Advanced > System settings to ensure email communications are enabled.");
             $_helper->log($_helper->__("Could not find default template, or template not valid, or email communications disabled in Advanced > System settings."));
         }
     } catch (Exception $e) {
         $success = false;
         $msg = $msg . "<br/>" . $_helper->__("Could not test default template validity.");
         $msg = $msg . "<br/>" . $_helper->__("Exception message was: %s", $e->getMessage() . "...");
         $msg = $msg . "<br/>" . $_helper->__("Please check that you have templates in place for your emails. These are in app/locale, or custom defined in System > Transaction Emails.");
         $_helper->log($_helper->__("Could not test default template validity: %s", $e->getMessage()));
     }
     $_helper->log($_helper->__("Checking that tables are created..."));
     try {
         $logName = Mage::getSingleton('core/resource')->getTableName("smtppro_email_log");
         $logExists = Mage::getSingleton('core/resource')->getConnection('core_read')->isTableExists($logName);
         if (!$logExists) {
             $success = false;
             $msg = $msg . "<br/>" . $_helper->__("Could not find required database tables.");
             $msg = $msg . "<br/>" . $_helper->__("Please try to manually re-run the table creation script. For assistance please contact us.");
             $_helper->log($_helper->__("Could not find required database tables."));
         } else {
             $msg = $msg . "<br/>" . $_helper->__("Required database tables exist.");
             $_helper->log($_helper->__("Required database tables exist."));
         }
     } catch (Exception $e) {
         $success = false;
         $msg = $msg . "<br/>" . $_helper->__("Could not find required database tables.");
         $msg = $msg . "<br/>" . $_helper->__("Exception message was: %s", $e->getMessage());
         $msg = $msg . "<br/>" . $_helper->__("Please try to manually re-run the table creation script. For assistance please contact us.");
         $_helper->log($_helper->__("Could not find required database tables: %s", $e->getMessage()));
     }
     $_helper->log($_helper->__("Complete"));
     if ($success) {
         $msg = $msg . "<br/>" . $_helper->__("Testing complete, if you are still experiencing difficulties please visit <a target='_blank' href='http://magesmtppro.com'>the support page</a> or contact me via <a target='_blank' href='mailto:support@aschroder.com'>support@aschroder.com</a> for support.");
         Mage::getSingleton('adminhtml/session')->addSuccess($msg);
     } else {
         $msg = $msg . "<br/>" . $_helper->__("Testing failed,  please review the reported problems and if you need further help visit  <a target='_blank' href='http://magesmtppro.com'>the support page</a> or contact me via <a target='_blank' href='mailto:support@aschroder.com'>support@aschroder.com</a> for support.");
         Mage::getSingleton('adminhtml/session')->addError($msg);
     }
     $this->_redirectReferer();
 }
Example #4
0
 /**
  * Send mail to recipient
  *
  * @param   array|string       $email        E-mail(s)
  * @param   array|string|null  $name         receiver name(s)
  * @param   array              $variables    template variables
  * @return  boolean
  **/
 public function send($email, $name = null, array $variables = array())
 {
     $_helper = Mage::helper('smtppro');
     // If it's not enabled, just return the parent result.
     if (!$_helper->isEnabled()) {
         $_helper->log('SMTP Pro is not enabled, fall back to parent class');
         return parent::send($email, $name, $variables);
     }
     // As per parent class - except addition of before and after send events
     if (!$this->isValidForSend()) {
         $_helper->log('Email is not valid for sending, this is a core error that often means there\'s a problem with your email templates.');
         Mage::logException(new Exception('This letter cannot be sent.'));
         // translation is intentionally omitted
         return false;
     }
     $emails = array_values((array) $email);
     $names = is_array($name) ? $name : (array) $name;
     $names = array_values($names);
     foreach ($emails as $key => $email) {
         if (!isset($names[$key])) {
             $names[$key] = substr($email, 0, strpos($email, '@'));
         }
     }
     $variables['email'] = reset($emails);
     $variables['name'] = reset($names);
     ini_set('SMTP', Mage::getStoreConfig('system/smtp/host'));
     ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
     $mail = $this->getMail();
     $setReturnPath = Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH);
     switch ($setReturnPath) {
         case 1:
             $returnPathEmail = $this->getSenderEmail();
             break;
         case 2:
             $returnPathEmail = Mage::getStoreConfig(self::XML_PATH_SENDING_RETURN_PATH_EMAIL);
             break;
         default:
             $returnPathEmail = null;
             break;
     }
     if ($returnPathEmail !== null) {
         $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $returnPathEmail);
         Zend_Mail::setDefaultTransport($mailTransport);
     }
     foreach ($emails as $key => $email) {
         $mail->addTo($email, '=?utf-8?B?' . base64_encode($names[$key]) . '?=');
     }
     $this->setUseAbsoluteLinks(true);
     $text = $this->getProcessedTemplate($variables, true);
     if ($this->isPlain()) {
         $mail->setBodyText($text);
     } else {
         $mail->setBodyHTML($text);
     }
     $mail->setSubject('=?utf-8?B?' . base64_encode($this->getProcessedTemplateSubject($variables)) . '?=');
     $mail->setFrom($this->getSenderEmail(), $this->getSenderName());
     try {
         $transport = new Varien_Object();
         Mage::dispatchEvent('aschroder_smtppro_template_before_send', array('mail' => $mail, 'template' => $this, 'variables' => $variables, 'transport' => $transport));
         if ($transport->getTransport()) {
             // if set by an observer, use it
             $mail->send($transport->getTransport());
         } else {
             $mail->send();
         }
         foreach ($emails as $key => $email) {
             Mage::dispatchEvent('aschroder_smtppro_after_send', array('to' => $email, 'template' => $this->getTemplateId(), 'subject' => $this->getProcessedTemplateSubject($variables), 'html' => !$this->isPlain(), 'email_body' => $text));
         }
         $this->_mail = null;
     } catch (Exception $e) {
         $this->_mail = null;
         Mage::logException($e);
         return false;
     }
     return true;
 }
 /**
  * Send mail to recipient
  *
  * @param   array|string       $email        E-mail(s)
  * @param   array|string|null  $name         receiver name(s)
  * @param   array              $variables    template variables
  * @return  boolean
  **/
 public function send($email, $name = null, array $variables = array())
 {
     $_helper = Mage::helper('smtppro');
     // If it's not enabled, just return the parent result.
     if (!$_helper->isEnabled()) {
         $_helper->log('SMTP Pro is not enabled, fall back to parent class');
         return parent::send($email, $name, $variables);
     }
     // As per parent class - except addition of before and after send events
     if (!$this->isValidForSend()) {
         $_helper->log('Email is not valid for sending, this is a core error that often means there\'s a problem with your email templates.');
         Mage::logException(new Exception('This letter cannot be sent.'));
         // translation is intentionally omitted
         return false;
     }
     $emails = array_values((array) $email);
     $names = is_array($name) ? $name : (array) $name;
     $names = array_values($names);
     foreach ($emails as $key => $email) {
         if (!isset($names[$key])) {
             $names[$key] = substr($email, 0, strpos($email, '@'));
         }
     }
     $variables['email'] = reset($emails);
     $variables['name'] = reset($names);
     $this->setUseAbsoluteLinks(true);
     $text = $this->getProcessedTemplate($variables, true);
     $subject = $this->getProcessedTemplateSubject($variables);
     $setReturnPath = Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH);
     switch ($setReturnPath) {
         case 1:
             $returnPathEmail = $this->getSenderEmail();
             break;
         case 2:
             $returnPathEmail = Mage::getStoreConfig(self::XML_PATH_SENDING_RETURN_PATH_EMAIL);
             break;
         default:
             $returnPathEmail = null;
             break;
     }
     // Use the queue IFF it's not bypassed and it's been set.
     if (!$_helper->isQueueBypassed() && $this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {
         /** @var $emailQueue Mage_Core_Model_Email_Queue */
         $emailQueue = $this->getQueue();
         $emailQueue->setMessageBody($text);
         $emailQueue->setMessageParameters(array('subject' => $subject, 'return_path_email' => $returnPathEmail, 'is_plain' => $this->isPlain(), 'from_email' => $this->getSenderEmail(), 'from_name' => $this->getSenderName(), 'reply_to' => $this->getMail()->getReplyTo(), 'return_to' => $this->getMail()->getReturnPath()))->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
         $emailQueue->addMessageToQueue();
         $_helper->log('Email not sent immediately, queued for sending.');
         return true;
     }
     ini_set('SMTP', Mage::getStoreConfig('system/smtp/host'));
     ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
     $mail = $this->getMail();
     if ($returnPathEmail !== null) {
         $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $returnPathEmail);
         Zend_Mail::setDefaultTransport($mailTransport);
     }
     foreach ($emails as $key => $email) {
         $mail->addTo($email, '=?utf-8?B?' . base64_encode($names[$key]) . '?=');
     }
     if ($this->isPlain()) {
         $mail->setBodyText($text);
     } else {
         $mail->setBodyHTML($text);
     }
     $mail->setSubject('=?utf-8?B?' . base64_encode($subject) . '?=');
     $mail->setFrom($this->getSenderEmail(), $this->getSenderName());
     foreach (Mage::app()->getStores() as $store) {
         if ($this->getSenderEmail() == Mage::getStoreConfig('trans_email/ident_sales/email', $store->getStoreId())) {
             $storeid = $store->getStoreId();
         }
     }
     try {
         $transport = new Varien_Object();
         Mage::dispatchEvent('aschroder_smtppro_template_before_send', array('mail' => $mail, 'template' => $this, 'variables' => $variables, 'transport' => $transport, 'store_id' => isset($storeid) ? $storeid : null));
         if ($transport->getTransport()) {
             // if set by an observer, use it
             $mail->send($transport->getTransport());
         } else {
             $mail->send();
         }
         foreach ($emails as $key => $email) {
             Mage::dispatchEvent('aschroder_smtppro_after_send', array('to' => $email, 'template' => $this->getTemplateId(), 'subject' => $subject, 'html' => !$this->isPlain(), 'email_body' => $text));
         }
         $this->_mail = null;
     } catch (Exception $e) {
         $this->_mail = null;
         Mage::logException($e);
         return false;
     }
     return true;
 }
 public function send()
 {
     $_helper = Mage::helper('smtppro');
     // if we have a valid queue page size override, use it
     if (is_numeric($_helper->getQueuePerCron()) && intval($_helper->getQueuePerCron()) > 0) {
         $percron = $_helper->getQueuePerCron();
         $_helper->log('SMTP Pro using queue override page size: ' . $percron);
     } else {
         $percron = self::MESSAGES_LIMIT_PER_CRON_RUN;
     }
     $pauseMicros = 0;
     // if we have a valid pause, use it
     if (is_numeric($_helper->getQueuePause()) && intval($_helper->getQueuePause()) > 0) {
         $pauseMicros = $_helper->getQueuePause() * 1000;
         // * 1000 for millis => micros
         $_helper->log('SMTP Pro using queue override pause: ' . $pauseMicros);
     }
     /** @var $collection Mage_Core_Model_Resource_Email_Queue_Collection */
     $collection = Mage::getModel('core/email_queue')->getCollection()->addOnlyForSendingFilter()->setPageSize($percron)->setCurPage(1)->load();
     ini_set('SMTP', Mage::getStoreConfig('system/smtp/host'));
     ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
     /** @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());
             }
             foreach (Mage::app()->getStores() as $store) {
                 if ($parameters->getFromEmail() == Mage::getStoreConfig('trans_email/ident_sales/email', $store->getStoreId())) {
                     $storeid = $store->getStoreId();
                 }
             }
             try {
                 $transport = new Varien_Object();
                 Mage::dispatchEvent('aschroder_smtppro_queue_before_send', array('mail' => $mailer, 'transport' => $transport, 'message' => $message, 'store_id' => isset($storeid) ? $storeid : null));
                 if ($transport->getTransport()) {
                     // if set by an observer, use it
                     $mailer->send($transport->getTransport());
                 } else {
                     $mailer->send();
                 }
                 unset($mailer);
                 $message->setProcessedAt(Varien_Date::formatDate(true));
                 $message->save();
                 // loop each email to fire an after send event
                 foreach ($message->getRecipients() as $recipient) {
                     list($email, $name, $type) = $recipient;
                     Mage::dispatchEvent('aschroder_smtppro_after_send', array('to' => $email, 'template' => "queued email", 'subject' => $parameters->getSubject(), 'html' => !$parameters->getIsPlain(), 'email_body' => $message->getMessageBody()));
                 }
             } catch (Exception $e) {
                 unset($mailer);
                 $oldDevMode = Mage::getIsDeveloperMode();
                 Mage::setIsDeveloperMode(true);
                 Mage::logException($e);
                 Mage::setIsDeveloperMode($oldDevMode);
                 return false;
             }
             // after each valid message has been sent - pause if required
             if ($pauseMicros > 0) {
                 $_helper->log('SMTP Pro pausing.');
                 usleep($pauseMicros);
             }
         }
     }
     return $this;
 }