据我所知,我的邮件设置配置正确,但我没有收到任何电子邮件,不是通过联系表格,也不是新客户或任何订单。
以下是我目前的设置:
我试过了:
更改为SMTP,我收到错误,我的主机(IXWebHosting)说我 需要在应用程序中禁用授权,我不能 看到这个选项
在电子邮件之前添加-f和-F suggested here
将不同的电子邮件添加到底部的“也发送到”框中 邮件页面
手动将代码中的“发件人”标题定义为suggested here
尝试@ 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 ==?=
答案 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版本中。
答案 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']);
这解决了我。