更新:(2/29/12)好吧,所以我在完全不同的服务器和托管公司上为另一个客户遇到了相同的问题。
同样,只有mail()脚本可以正确发送电子邮件,没有问题。然后,我添加了类似于下面代码的代码,并将其与PayPal IPN连接。每次收到新的付款时,IPN会触发,数据会保存到数据库中,但mail()函数却无法工作。
然而,我遇到了一个有趣的问题。我使用相同的脚本在PayPal沙箱中进行了测试IPN,邮件就被发送了。
这是PayPal生产IPN的问题吗?也许是它向脚本发布数据的方式有问题?
任何相关信息都会非常有帮助,因为我目前使用cronjobs的解决方案很糟糕。
更新完毕
我的PayPal IPN监听器已经正确配置,因为当有新的付款时,它会将所有��息写入数据库。现在我正在尝试设置一个mail()函数来发送新付款的电子邮件提醒。
我之前已经为另一个项目完成了这个功能,但我现在无法理解为什么它不起作用。在error_log中我没有得到任何错误信息,并且脚本的其余部分运行良好。
我已经测试过服务器实际上是否能够使用独立的mail()脚本发送邮件,但我真的迷失和困惑了。
下面是我的代码:
mail('test@email.com', 'New Order', 'New Order', 'From: support@website.com');
define("_VALID_PHP", true);
require_once('../php/init.php');
$item_number = $_POST['item_number'];
$payment_gross = $_POST['payment_gross'];
$payment_status = $_POST['payment_status'];
$payer_email = $_POST['payer_email'];
$txn_id = $_POST['txn_id'];
if ($payment_status == 'Completed') {
$query = $db->query("SELECT price, id, uid FROM invoice WHERE md5='$item_number'");
$row = $db->fetch($query);
$iid = $row['id'];
$uid = $row['uid'];
if ($row['price'] == $payment_gross){
$invoiceUpdate['paid'] = 1;
$update = $db->update('invoice', $invoiceUpdate, "md5='$item_number'");
}
}
$data['iid'] = $iid;
$data['uid'] = $uid;
$data['payment_status'] = $payment_status;
$data['payer_email'] = $payer_email;
$data['payment_gross'] = $payment_gross;
$data['txn_id'] = $txn_id;
$db->insert('payment', $data);