Magento的 - 如何启用SMTP服务器认证和安全传输?(Magento - How enabl

2019-06-26 10:02发布

我想使SMTP服务器上的Magento应用程序(版本1.7)工作。 所以我加了下面的代码放在文件app/code/core/Mage/Core/Model/Email/Template.php

public function getMail()
    {
        if (is_null($this->_mail)) {

            /*Start of added code to specify config*/
            $my_smtp_host = Mage::getStoreConfig('system/smtp/host');
            $my_smtp_port = Mage::getStoreConfig('system/smtp/port'); 

            $config = array(
                    'ssl' => 'tls',
                    'port' => $my_smtp_port,
                    'auth' => 'login',
                    'username' => 'account@gmail.com',
                    'password' => 'secret'
            );

            $transport = new Zend_Mail_Transport_Smtp($my_smtp_host, $config);

            Zend_Mail::setDefaultTransport($transport);
            /*End of added code to specify config*/

            $this->_mail = new Zend_Mail('utf-8');
        }
        return $this->_mail;
    }

然后在管理面板- >系统- >配置- >高级- >系统- >邮件发送设置

已添加以下设置

  • 主持人:smtp.gmail.com
  • 端口(25):587

完成这些更改后,我做了前端测试(即发邮件给朋友)。 被证明成功的消息,但该邮件是不是在邮箱中(甚至在垃圾邮件)。

希望有人能帮助我。 真的很感谢,谢谢!

Answer 1:

你不应该攻入核心代码,有很多的原因,因为这是不是一个好主意。 其一是:你是不是能够升级。

而是使用一个扩展或者自己写: http://www.magentocommerce.com/magento-connect/ASchroder/extension/1865/aschroder.com-smtp-pro



Answer 2:

我已成功地从本地主机发送忘记密码的电子邮件。

你唯一需要做的就是按照下面列出和你做的步骤。

  1. 修改此页app/code/core/Mage/Core/Model/Email/Template.php

注释现有的功能,并添加下面的代码

    public function getMail()
    {
     if (is_null($this->_mail)) {
        /* changes begin */
       $my_smtp_host = Mage::getStoreConfig('system/smtp/host');
       $my_smtp_port = Mage::getStoreConfig('system/smtp/port');
       $config = array(
                'port' => $my_smtp_port,
                'auth' => 'login',
                'username' => 'your username',
                'password' => 'your password'
            );
        $transport = new Zend_Mail_Transport_Smtp($my_smtp_host, $config);
        Zend_Mail::setDefaultTransport($transport);
        /* Changes End */
        $this->_mail = new Zend_Mail('utf-8');
    }
    return $this->_mail;
}
  1. 登录管理System -> Configuration -> Advanced -> System -> Mail Sending settings并设置以下的东西。

    禁用电子邮件通信=否

    主机= smtp.mandrillapp.com

    端口(25)= 587

    设置返回路径=否

  1. 登录管理System -> Transactional Emails -> Add New Template请按照下列步骤

    • 在加载默认模板-选择喜欢的模板,要求'Forgot Password' ,然后点击Load Template默认模板将模板内容来填充

    • 在模板信息-提供任何模板名称,如Forgot Password ,然后点击保存模板。

  2. 登录管理System -> Configuration -> Customers -> Customer Configuration -> Password Options

    • Forgot Email Template选择“忘记密码”(这是在交易电子邮件标签创建)从下拉。

    • 选择Remind Email Template ,以“忘记密码”

    • 选择Forgot and Remind Email Sender任何下拉的前值-客户支持。

注 - 确保客户支持设置为某些有效的电子邮件地址。 为了修改该客户的支持电子邮件-登录管理System -> Configuration -> General -> Store email Address -> Customer support添加有效的电子邮件地址。

这是所有做。 请随意张贴您的查询。 欲了解更多信息请参阅本http://pravams.com/2011/07/30/magento-send-email-using-smtp/



Answer 3:

Magento的邮件传输设置和来自这两个函数执行

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

下面是我创建通过我们的电子邮件服务提供商直接交易电子邮件,工作模块代码。 它覆盖Mage_Core_Model_Email_Template -> send()

请注意,您将需要硬编码为您的目的,此代码示例额外的配置项缺少安装程序,添加字段,系统配置,但它应该给你的需要如何改变在send()函数的想法使用需要认证,并能提供SSL SMTP服务器/ TLS保护运输。

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;
}


文章来源: Magento - How enable SMTP server authentication and secure transport?