【发布时间】:2014-10-04 13:04:26
【问题描述】:
我在使用 OpenCart 时遇到问题,当使用借记卡/信用卡通过 PayPal Pro 结账时按下“确认订单”时,“请稍候”消息出现然后消失,没有进入确认页面。电子邮件被发送给客户和所有者,款项已支付,但要进入确认页面,您必须再次按“确认订单”。这会将钱再次发送到 PayPal,但不会发送额外的电子邮件,第二笔订单也不会出现在 OpenCart 记录中。
在第一次单击时,会生成以下错误消息 3 次:
PHP Warning: mail() [<a href='function.mail'>function.mail</a>]: Bad parameters to mail() function, mail not sent. in /.../store/system/library/mail.php on line 148
但是,电子邮件确实已发送。第二次点击不会产生任何错误。
我检查了电子邮件设置,它们似乎都是正确的(我在邮件参数框中尝试了info@domain.com 和-finfo@domain.com)并且没有任何变化。我使用的是邮件选项而不是 SMTP。
主持人是 GoDaddy,我知道有时候电子邮件有点搞笑。我尝试在 PHP 中跟踪代码,但我找不到参数变量的实际设置位置,我认为它是从 OpenCart 管理员中的设置中获取的。
我尝试从 mail.php 中的 mail() 函数中删除参数选项,并且在第一次点击时结帐工作,但邮件根本没有发送,所以我很确定修复错误将修复结帐问题,我只是不确定下一步该尝试什么。
编辑:
我一直在对发送电子邮件的线路进行一些试验。 OpenCart 最初将其设置为:
mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter);
为了确保邮件实际上是这样工作的,我将其更改为:
mail('myaddress@email.com', 'Test', 'Hello', 'From: info@domain.com', '-finfo@domain.com');
那行得通。我点击了“确认订单”,它按预期工作。然后,我尝试了删除变量并用我的测试中的详细信息替换它们的各种组合。首先,我添加回 $this->parameter 认为它最有可能是罪魁祸首,但效果很好。我继续对其他变量执行此操作,但每次都失败。
【问题讨论】:
-
我想看看你的
phpinfo()的配置sendmail_from和sendmail_path -
您确定可以通过
mail从 GoDaddy 发送邮件(任何其他邮件)吗?通常在共享主机上,您需要为此使用 SMTP... -
@shadyx “但是,电子邮件确实被发送了。”虽然奇怪的是即使发送电子邮件也会出现错误消息......
-
在第 148 行的 store/system/library/mail.php 中,对 mail() 函数中使用的变量执行 var_dump,查看它们是否都包含值。一个草率的修复可以是在邮件函数之前添加@,从而弃用任何错误消息。虽然不建议。首先,对传递给邮件的所有变量执行 var_dump() 以检查它们。
-
@Ole Haugset 不幸的是,当我尝试 var_dump 时什么也没显示。可能与 OpenCart 的工作方式有关。我也尝试了草率的修复,但它什么也没做。我仍然收到错误消息,并且仍然遇到问题。