opencart mail.php,opencart设置SMTP情况下联系我们页面无法发邮件的解决办法 | SDT技术网...

前几天,有个人和我说能不能解决联系我们页面无法发邮件,我突然想起来,,当年我网站也有这个问题,可是因为事情多,这个页面也觉得用不上,我好像就没去搭理了。于是展开了研究。

联系我们的页面地址是:http://www.3clove.cn/index.php?route=information/contact 那么,也就是相应的处理文件在:catalog/controller/information/contact.php

不过,一开始,我是从错误文件开始看的,也就是:system/library/mail.php 这个文件。可是,我测试了好久,没发现什么可以修复的地方。

那么,难道就不能解决了么?仔细查看错误提示:“Error: MAIL FROM not accepted from server!”

其实,我英语不怎么好,于是我测试了下,我填写了自己的邮件地址,也就是和SMTP的一样。于是乎,这个邮件可以发出去。

懂了吧,也就是,发件人和SMTP账户一样,其实是一种安全保护。那么,怎么办?

一,把这个页面单独改为 mail函数发送,可是也有很多主机商不支持mail函数呢。。怎么办呢?

二:发件人是自己,用户填写的邮箱通过邮件传达即可。

那么,我们用第二个方案,比较靠谱,于是着手修改处理器文件“contact.php”

我们打开这个文件,可以看到下面这些代码:

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {

$mail = new Mail();

$mail->protocol = $this->config->get('config_mail_protocol');

$mail->parameter = $this->config->get('config_mail_parameter');

$mail->hostname = $this->config->get('config_smtp_host');

$mail->username = $this->config->get('config_smtp_username');

$mail->password = $this->config->get('config_smtp_password');

$mail->port = $this->config->get('config_smtp_port');

$mail->timeout = $this->config->get('config_smtp_timeout');

$mail->setTo($this->config->get('config_email'));

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

$mail->setSender($this->request->post['name']);

$mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));

$mail->setText(strip_tags(html_entity_decode($this->request->post['enquiry'], ENT_QUOTES, 'UTF-8')));

$mail->send();

$this->redirect($this->url->link('information/contact/success'));

}

这里我们可以很容易的看到几个POST参数:email、name 和 enquiry ,明显对应的是用户填写的邮件地址、名字和邮件内容了。那么,我们着手修改,把发件人,改为自己。

//收件人

$mail->setTo($this->config->get('config_email'));

//发件人

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

很明显我们可以看到对应的值,于是修改为:

//收件人

$mail->setTo($this->config->get('config_email'));

//发件人

$mail->setFrom($this->config->get('config_email'));

那么,到了这里,你会发现一个问题,,,等等,,我咋知道发件人到底原本是谁??于是乎:

//收件人名称

$mail->setSender($this->request->post['name']);

//修改为:

$mail->setSender($this->request->post['name'].'request->post['email'].'>');

也就是,发件人姓名这里后面带入发件人邮箱地址。方便我们知道是谁发来的。

嗯,到此我以为就告一段落了,今天写vqmod插件后,准备在服务器上也测试,发现,,,多了个问题:“Error: RCPT TO not accepted from server!”,那么怎么办呢?我也是查看了几个地方,发现,要不,测试下修改收件人吧,嗯,我自己定义了一个收件人,于是乎,真的收到了,然后我把定义的收件人改回去[写死],可是依然不行,那么,,,解决办法自然是:

//收件人

$mail->setTo($this->config->get('config_email'));

//改为自己定义的,区别于系统设置的邮件地址:

$mail->setTo('yourmail@mail.com');

嗯,至此,所有问题解决了,但是,如果你害怕自己修改代码出问题,可以下载我免费提供的一个vqmod插件,适合1.5 系列和 2.0系列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值