Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento-如何启用SMTP服务器身份验证和安全传输?_Magento_Email_Smtp - Fatal编程技术网

Magento-如何启用SMTP服务器身份验证和安全传输?

Magento-如何启用SMTP服务器身份验证和安全传输?,magento,email,smtp,Magento,Email,Smtp,我想让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::g

我想让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
完成这些更改后,我在前端进行了测试(即给朋友发电子邮件)。显示了成功消息,但电子邮件不在邮箱中(甚至不在垃圾邮件中)


希望有人能帮助我。非常感谢,谢谢

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

而是使用扩展名或编写自己的扩展名:

Magento邮件传输是通过这两个功能设置和执行的

  • Mage\u Core\u Model\u Email\u Template->send()
  • Mage\u时事通讯\u Model\u模板->发送()
  • 下面是我创建的工作模块代码,用于通过我们的电子邮件服务提供商引导事务性电子邮件。它覆盖
    Mage\u Core\u Model\u Email\u 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;
    }
    

    我已设法从localhost发送忘记密码的电子邮件

    你唯一需要做的就是按照下面列出的步骤完成你的任务

  • 修改此页面
    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;
    }
    
  • 登录到admin
    System->Configuration->Advanced->System->Mail Sending settings
    并设置以下内容

    禁用电子邮件通信=否

    Host=smtp.mandrillapp.com

    端口(25)=587

    设置返回路径=否

  • 登录到管理员
    系统->事务性电子邮件->添加新模板
    按照以下步骤操作

    • 在加载默认模板-选择所需的模板,如
      “忘记密码”
      ,然后单击
      加载模板
      将在模板内容中填充默认模板

    • 在模板信息中-提供任何模板名称,如
      忘记密码
      ,然后单击保存模板

  • 登录到管理员
    系统->配置->客户->客户配置->密码选项

    • 忘记的电子邮件模板中
      选择“忘记的密码”(该密码是在中创建的) 从下拉列表中选择“事务性电子邮件”选项卡)

    • 选择
      提醒电子邮件模板
      “忘记密码”

    • 选择“忘记”并将电子邮件发件人提醒到ex的任何下拉值- 客户支持

  • 注意-确保客户支持设置为某个有效的电子邮件地址。为了修改客户支持电子邮件-登录到admin
    System->Configuration->General->Store email Address->customer support
    添加有效的电子邮件地址

    你的事都做完了。请随时发布您的疑问。
    有关更多信息,请参阅此

    您尝试过吗?如果是,您必须实现自己的模块。也许可以在Twitter上联系@aschroeder并请求更新。如果您需要帮助,请与我联系:stackoverflow@fabian-布莱希米特。de@DHC抱歉,我把你的评论写得太多了。费边,你知道这个扩展是否在github上吗?我想快速浏览一些代码,而不必通过magento connect下载整个内容?Lazy:)不知道,我通过Twitter问他,他会在这里发布答案,但你可以通过pear下载,不知怎么的,aschroder知道答案,一个可怕的家伙:)或者你使用这个工具:我需要1.7.0的扩展:(你在本地主机上测试过吗?如果是真的,那么没有什么奇怪的,电子邮件被转到了垃圾邮件文件夹被覆盖的错误函数,
    Mage\u Core\u Model\u email\u Template->send()
    是需要用您的模块代码覆盖的内容。在最新版本的Magento中找不到app/code/core/Mage/core/Model/Email/Template.php文件,但其余过程正常