2

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

这是我当前的设置:

在此处输入图像描述

我试过了:

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

  2. 按照此处的建议在电子邮件前添加 -f 和 -F

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

  4. 按照此处的建议手动定义代码中的“From”标头

  5. 试过@gmail.com、@googlemail.com 和@arabel.co.uk

不幸的是,我仍然没有收到来自 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==?=

4

5 回答 5

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;
于 2013-01-13T18:54:22.650 回答
3

我对此感到非常沮丧..

问题实际上出在您的服务器上...如果您使用邮件选项,则必须在本地主机上设置邮件服务器。但问题是您的 ISP 是否支持 smtp 的 25 端口。如果没有,那你就有问题了。

第二种选择是使用 gmail smtp 或 hotmail smtp。我尝试过但惨遭失败。我不知道为什么 gmail 对我不起作用,但我用谷歌搜索了整个互联网,发现人们随机遇到 gmail 问题。

我正在搜索并尝试了最后的手段..来自我的 isp 的 smtp。我使用了我的 ISP 的 smtp 并在 SMTP 上设置了选项,发现东西有效。

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

TL,DR:如果您在本地主机上工作,请尝试您自己的 isp smtp,如果不是,请让您的托管服务提供商为您解决问题:)

PS:您不能禁用授权。P以前的opencart版本没有授权,这很有趣,他们为什么没有添加选项来选择是否授权。

如果您知道编码,则可以在 opencart 中编辑邮件类,如果不知道,您唯一的解决方案是使用您的 ISP smtp 或转移到使用 smtp 授权设置其邮件服务器的主机(即使对于您当前的托管)。

于 2013-02-12T15:46:54.527 回答
3

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

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

在此处输入图像描述

于 2013-06-13T17:54:04.837 回答
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);
}
于 2014-02-22T15:28:56.367 回答
2

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

这很清楚,因为当我填写test@mydomain.com联系表格时,它可以工作,而且常规电子邮件也确实到达了。

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

如果您不知道如何编辑源代码,请不要继续此操作,我省略了一些简单的步骤。如果您不知道这些步骤,请不要问,而是请专业人士进行查找。(只是为了保护自己)

文件:catalog/controller/information/contact.php

函数索引,对我来说在第 21 行:

原来的:

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

新的:

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

这为我解决了。

于 2017-01-10T18:40:06.160 回答