1

我正在尝试使用 phpmailer 通过 Qmail 服务器发送电子邮件。发送后,我收到消息“消息已发送”,但没有收到任何消息。这是我的代码:

<?php
require("class.phpmailer.php");
$name = "Purchase Form";
$email_subject = "New Purchase Ticket";
$body = NULL;
foreach ($_REQUEST as $field_name => $value){
if (!empty($value)) $body .= "$field_name = $value\n\r";
}
$mail = new PHPMailer();
$mail->IsQmail();
$mail->FromName = $name;
$mail->AddAddress('*******@*********', 'Purchase Ticket');
$mail->Body = $body;
$mail->IsHTML(false);
$mail->Subject = $email_subject;
if(!$mail->Send())
{  echo "didnt work";
}
else {echo "Message has been sent";}

?>

从命令行我可以输入mail *****@****.com blah blah并成功发送..

4

3 回答 3

2

检查您的邮件服务器的日志。服务器是否处于活动状态?它在处理邮件队列吗?它是否尝试发送消息?消息反弹了吗?消息是否卡在队列中?

仅仅因为 PHPMailer 说它有效并不意味着任何事情都真正成功了。这意味着 PHPMailer 成功地将电子邮件交给了 SMTP 服务器。在那之后,它就完全不在 PHPMailer 的手中了。由于 PHP 方面的一切似乎都奏效了,因此您必须将调查移至该过程的下一阶段,即 SMTP 服务器。

于 2011-09-07T21:41:06.863 回答
0

确保您的服务器允许您以您设置的用户身份发送FromName

于 2011-09-07T21:26:07.553 回答
0

我认为这是一个 CR/LF 问题,这是 php 中的一个已知错误大约四年,并且 - 据我所知 - 到目前为止尚未修复:

http://bugs.php.net/bug.php?id=15841

由于使用了不符合 RFC 的换行格式,生成的电子邮件无效(可以在此处找到说明:http ://cr.yp.to/docs/smtplf.html)。其他 MTA(如 sendmail 和 postfix)会自动纠正此问题;qmail 没有。

您可以:使用 php ( lol ) 编写正确的邮件,或者让您的 qmail-administrator 使用 QmailScanner ( http://qmail-scanner.sourceforge.net/ ),它也可以完成这项工作。

最好的解决方案是卸载 php 并在未来的鸭子中使用 perl ;)

于 2011-10-08T18:21:41.877 回答