Php OpenCart-不发送电子邮件(通知或联系人页面)
据我所知,我的邮件设置配置正确,但我没有收到任何电子邮件,没有通过联系人表单,也没有新客户或任何订单 以下是我当前的设置: 我试过:Php OpenCart-不发送电子邮件(通知或联系人页面),php,email,base64,opencart,Php,Email,Base64,Opencart,据我所知,我的邮件设置配置正确,但我没有收到任何电子邮件,没有通过联系人表单,也没有新客户或任何订单 以下是我当前的设置: 我试过: 更改为SMTP时,我收到一个错误,我的主机(IXWebHosting)说我 需要在应用程序中禁用授权,而我无法 查看此选项的一个选项 在电子邮件之前添加-f和-f作为 将不同的电子邮件添加到列表底部的“还发送到”框中 邮件页面 手动将代码中的“From”头定义为 试过@gmail.com、@googlemail.com和@arabel.co.uk 不幸的是,我仍
echo $header = 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline;
die();
echo$header='From:'。=?UTF-8?B?’。base64_编码($this->sender)。“?=”。”$本->新线;
模具();
输出如下:
From:=?UTF-8?B?Tmljaw===
老实说,我不完全确定为什么会有Base64编码。打开
system/library/mail.php
并更改此行
echo $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline;
echo$header.=“发件人:”。=?UTF-8?B?’。base64_编码($this->sender)。“?=”。”$本->新线;
到
$header.='From:'$此->发件人。“”$本->新线;
我对此感到非常沮丧
问题确实出在你的服务器上。。。如果使用邮件选项,则必须在本地主机上设置邮件服务器。
但问题是,您的ISP是否支持smtp的25端口。如果没有,那你就有麻烦了
第二种选择是使用gmail smtp或hotmail smtp。
我试过了,但失败得很惨。。我不知道为什么gmail对我不起作用,但我搜索了整个互联网,发现人们随机地对gmail有问题
我在寻找,并尝试了最后的办法。。smtp从我的isp。我使用了我的ISP的smtp并在smtp上设置了选项,发现这些东西是有效的
我打电话给我的ISP,他们不知道gmail为什么不工作,但他们告诉我,他们关闭了25个端口,以防止垃圾邮件发送者用你的用户名发送邮件
TL,DR:
如果您正在本地主机上工作,请尝试使用您自己的isp smtp,如果不是,请您的主机提供商为您解决问题:)
PS:您不能禁用授权。opencart的早期版本没有授权,这很有趣,为什么他们不添加选项来选择是否有授权
如果您知道编码,您可以在opencart中编辑邮件类,如果不知道,您唯一的解决方案是使用您的ISP smtp或移动到邮件服务器设置了smtp授权的主机(即使对于您当前的主机也不难设置)。尝试在站点的“设置”菜单中添加多个电子邮件地址。(现场管理) 它在OpenCart版本1.5.5.3中对我们有效
我尝试了所有可能的修复,但没有一个对我有效(我托管在Site5上,在Webfaction上,它有效)。 最后,我使用我安装的system/library/SwiftMailer目录重写了system/library/mail.php文件中的send()函数。 我的代码不完整,因为它假定身份验证总是必要的,但这应该是一个简单的修复方法
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);
}
我的解决方案是,当电子邮件的“发件人”中的域与主机不同时,我的服务器无法发送电子邮件 这很清楚,因为当我填写
test@mydomain.com
在联系方式中,它是有效的,而且定期的电子邮件也确实到达了
为了强制邮件从我自己的主机而不是填写的电子邮件地址发送,我编辑了联系人控制器
如果您不知道如何编辑源代码,请不要继续,我省略了一些简单的步骤。如果你不知道这些步骤,不要问,而是请专业人士查一下。(只是为了保护自己)
文件:catalog/controller/information/contact.php
功能索引,我在第21行:
原件:
$mail->setFrom($this->request->post['email']);
新的:
这为我解决了这个问题。+1此外,“回复”标题(就在“发件人”后面的下一行)似乎也遇到了同样的问题。将其修改为:
$header.='Reply to:'后$此->发件人。“”$本->新线代码>它似乎工作正常。但是php.ini
中使用的邮件主机肯定与此问题有关,因为电子邮件通知过去对我很有效,直到它们突然停止工作为止。如图所示。。。这也帮助了我的一位客户。可能是因为第一个电子邮件帐户存在配置问题,但你的提示使我们无法使用。谢谢;)您确定检查了html页面的源代码吗?因为零件被视为标记,所以不会显示在浏览器中。这就是为什么它只显示“From:=?UTF-8?B?Tmljaw==?=”。但是在html源代码中,电子邮件部分应该显示base64_编码之间的代码非常有效。你的输入是“尼克”。另外,你的浏览器只是隐藏了东西,因为它在标签中。。。
$mail->setFrom($this->request->post['email']);
$mail->setFrom($this->config->get('config_email'));
$mail->setReplyTo($this->request->post['email']);