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