【问题标题】:How to fix bad parameters to mail() error in OpenCart?如何修复 OpenCart 中 mail() 错误的错误参数?
【发布时间】: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 的工作方式有关。我也尝试了草率的修复,但它什么也没做。我仍然收到错误消息,并且仍然遇到问题。

标签: php paypal opencart


【解决方案1】:

店主添加了一些额外的电子邮件地址,以便将订单发送到。这些电子邮件地址的格式应该是address1@email.com,address2.email.com 等。

相反,逗号后面有一个空格,这完全是在抛出 OpenCart。可能应该在 OpenCart 中添加某种修复程序以忽略电子邮件字段中的空格,但现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多