4

我想让 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

完成这些更改后,我在前端进行了测试(即向朋友发送电子邮件)。显示成功消息,但电子邮件不在邮箱中(甚至不在垃圾邮件中)。

希望任何人都可以帮助我。真的很感谢,谢谢!

4

3 回答 3

9

你不应该侵入核心代码,有很多原因,因为这不是一个好主意。一是:您无法升级。

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

于 2012-07-19T14:38:42.093 回答
3

我已设法从本地主机发送忘记密码电子邮件。

您唯一需要做的就是按照下面列出的步骤操作并完成。

  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/

于 2014-04-28T07:34:08.663 回答
2

Magento Mail 传输是从这两个函数中设置和执行的

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

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

请注意,您需要为您的目的对额外的配置项进行硬编码,因为此代码示例缺少将字段添加到系统配置的设置,但它应该让您了解如何更改 send() 函数使用需要身份验证并可以提供 SSL/TLS 安全传输的 SMTP 服务器。

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;
}
于 2014-01-01T21:16:35.963 回答