Magento Mail transport is configured and made of these two functions
Mage_Core_Model_Email_Template -> send()Mage_Newsletter_Model_Template -> send()
Here is the work module code that I created to send transactional emails through our email service provider. It overwrites Mage_Core_Model_Email_Template -> send()
Please note that you will need to hard-code additional configuration items for your purposes, as this code sample does not have settings for adding fields to the system configuration, but it should give you an idea of how the send () function should be changed to using an SMTP server that requires authentication and can provide secure SSL / TLS transport.
public function send($email, $name = null, array $variables = array()) { if (!$this->isValidForSend()) { Mage::logException(new Exception('This letter cannot be sent.')); // translation is intentionally omitted return false; } /* Set up mail transport to Email Hosting Provider SMTP Server via SSL/TLS */ $config = array( 'ssl' => Mage::getStoreConfig('system/smtp/ssl'), // option of none, ssl or tls 'port' => Mage::getStoreConfig('system/smtp/port'), // TLS 587 - SSL 465 - default 25 'auth' => Mage::getStoreConfig('system/smtp/auth'), // Auth type none, login, plain, CRAM-MD5 'username' => Mage::getStoreConfig('system/smtp/username'), 'password' => Mage::getStoreConfig('system/smtp/password') ); /* Set up transport package to host */ $transport = new Zend_Mail_Transport_Smtp(Mage::getStoreConfig('system/smtp/host'), $config); /* End transport setup */ $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 { /* Send Transport, empty and log success */ $mail->send($transport); //transport object $this->_mail = null; Mage::log('Mailed to: ' . $this->getSenderEmail() . ' ' . $this->getSenderName() . ' ' .$this->getProcessedTemplateSubject($variables), null, 'email.log'); /* End */ } catch (Exception $e) { /* Or empty and log failure */ $this->_mail = null; Mage::log('Failure: ' . $e, null, 'email.log'); Mage::logException($e); return false; /* End */ } return true; }
source share