OpenCart - 不发送电子邮件(通知或联系页面)

时间:2013-01-13 18:33:23

标签: php email base64 opencart

据我所知,我的邮件设置配置正确,但我没有收到任何电子邮件,不是通过联系表格,也不是新客户或任何订单。

以下是我目前的设置:

enter image description here

我试过了:

  1. 更改为SMTP,我收到错误,我的主机(IXWebHosting)说我 需要在应用程序中禁用授权,我不能 看到这个选项

  2. 在电子邮件之前添加-f和-F suggested here

  3. 将不同的电子邮件添加到底部的“也发送到”框中 邮件页面

  4. 手动将代码中的“发件人”标题定义为suggested here

  5. 尝试@ gmail.com,@ googlemail.com和@ arabel.co.uk

  6. 不幸的是,我仍然没有收到OpenCart的任何电子邮件。我已联系我的主机并运行测试脚本 - 服务器上的邮件功能或设置没有问题,我刚从OpenCart下载了最新版本的mail.php(尽管这已经有六个月了,无论如何我正在使用的那个)

    由于

    更新:

    看起来base64_encode不起作用,因为这段代码:

    echo $header = 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline;
    die();
    

    输出:

      

    来自:=?UTF-8?B?Tmljaw ==?=

5 个答案:

答案 0 :(得分:9)

不完全确定为什么base 64编码是诚实的。打开system/library/mail.php并更改此行

echo $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline;

$header .= 'From: ' . $this->sender . ' <' . $this->from . '>' . $this->newline;

答案 1 :(得分:3)

我真的很沮丧......

问题出在您的服务器上......如果您使用邮件选项,则必须在localhost上设置邮件服务器。 但问题是你的ISP是否支持25端口的smtp。如果不是,那么你遇到了问题。

第二个选项是使用gmail smtp或hotmail smtp。 我痛苦地尝试和失败..我不知道为什么gmail对我不起作用,但我用谷歌搜索整个互联网,并发现人们随机出现gmail问题。

我正在寻找最后的尝试..来自我的isp的smtp。我使用了我的ISP的smtp并在SMTP上设置了选项,找到了可行的东西。

我打电话给我的ISP并且他们不知道为什么gmail不起作用,但是他们告诉我他们关闭了25个端口以阻止垃圾邮件发送者用您的用户名发送邮件。

TL,DR: 如果您正在使用localhost,请尝试使用自己的isp smtp,如果不是,请让您的托管服务提供商为您解决问题:)

PS:您无法禁用授权。 opencart的早期版本没有授权,这很有趣,为什么他们没有添加选项,无论是否授权选择。

如果您知道编码,您可以在opencart中编辑邮件类,如果没有,您唯一的解决方案是使用您的ISP smtp或移动到使用smtp授权设置其邮件服务器的托管(这甚至不难设置为您当前的托管服务。)

答案 2 :(得分:3)

尝试在您网站的设置菜单中添加多个电子邮件地址。 (现场管理)。

它适用于我们,在OpenCart 1.5.5.3版本中。

enter image description here

答案 3 :(得分:3)

我尝试了每一个可能的修复,没有一个对我有用(我在Site5上托管,在Webfaction上工作)。 我最后使用SwiftMailer重写了system / library / mail.php文件中的 send()函数我安装了system / library / swiftmailer目录。 我的代码不完整,因为它假定始终需要身份验证,但这应该是一个简单的解决方法。

public function send() {
    require_once(DIR_SYSTEM . 'library/swiftmailer/swift_required.php');

    if (!$this->to) {
        trigger_error('Error: E-Mail to required!');
        exit();         
    }

    if (!$this->from) {
        trigger_error('Error: E-Mail from required!');
        exit();                 
    }

    if (!$this->sender) {
        trigger_error('Error: E-Mail sender required!');
        exit();                 
    }

    if (!$this->subject) {
        trigger_error('Error: E-Mail subject required!');
        exit();                 
    }

    if ((!$this->text) && (!$this->html)) {
        trigger_error('Error: E-Mail message required!');
        exit();                 
    }

    if (is_array($this->to)) {
        $to = implode(',', $this->to);
    } else {
        $to = $this->to;
    }

    $message = Swift_Message::newInstance()
      ->setSubject($this->subject)
      ->setFrom(array($this->from => $this->sender))
      ->setTo(array($to))
      ->setBody($this->text);

    if($this->html){
        $message->addPart($this->html, 'text/html');
    }

    foreach ($this->attachments as $attachment) {
        if (file_exists($attachment)) {
            $message->attach(Swift_Attachment::fromPath($attachment));
        }
    }

    $transport = Swift_SmtpTransport::newInstance('localhost', 25)
    ->setUsername($this->username)
    ->setPassword($this->password);

    $mailer = Swift_Mailer::newInstance($transport);
    $mailer->send($message);
}

答案 4 :(得分:1)

我的解决方案是,当我们的服务器在“来自”中的域名与主机不同时,我的服务器无法发送电子邮件。

这很清楚,因为当我填写联系表格中的test@mydomain.com时,它会起作用,并且常规电子邮件也会到达。

为了强制从我自己的主机发送邮件而不是填写的电子邮件地址,我编辑了联系人控制器。

如果您不知道如何编辑源代码,请不要继续这样做,我省略了一些简单的步骤。如果您不知道这些步骤,请不要问,但请专业人士查看。 (仅为了您自己的保护)

档案:catalog/controller/information/contact.php

第21行的功能索引:

ORIGINAL:

$mail->setFrom($this->request->post['email']);

NEW:

$mail->setFrom($this->config->get('config_email'));
$mail->setReplyTo($this->request->post['email']);

这解决了我。