Magento - How enable SMTP server authentication and secure transport?

后端 未结 3 1888
甜味超标
甜味超标 2021-01-03 06:37

I\'d like to make the SMTP server working on Magento app(version 1.7). so I added the following code on file app/code/core/Mage/Core/Model/Email/Template.php

3条回答
  •  情歌与酒
    2021-01-03 06:50

    Magento Mail transport is set up and executed from these two functions

    1. Mage_Core_Model_Email_Template -> send()
    2. Mage_Newsletter_Model_Template -> send()

    Here's the working module code I created to direct transactional emails through our email service provider. It overwrites Mage_Core_Model_Email_Template -> send()

    Note that you will need to hard code the extra config items for your purposes as this code sample is missing the setup to add the fields to system config, but it should give you an idea of how the send() function needs to be changed for using an SMTP server that requires authentication and can provide SSL/TLS secured 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;
    }
    

提交回复
热议问题