PHP mail()函数中是否有错误?

Ori*_*ion 9 php email

我希望有人能够帮助我,因为我对导致问题的原因感到茫然.我们的网站有一个联系我们表格,其中包含姓名,电子邮件,孩子姓名,孩子ID和消息的字段.

当表单提交时,服务器端php代码验证表单字段,如果一切正常,则使用内置的php mail()函数发送2封电子邮件.

电子邮件1将转到托管Exchange服务器上的收件箱,其中包含表单字段中的值.

电子邮件2发送给提交表单的人说谢谢 - 我们会尽快给您回复.

对于电子邮件1,From,Reply-To和Return-Path标头设置为在表单中输入的电子邮件,而mail()函数中的To param是托管Exchange服务器的收件箱的电子邮件地址.

对于电子邮件2,From,Reply-To和Return-Path标题设置为托管Exchange服务器上收件箱的电子邮件地址,mail()函数中的To param是在表单中输入的电子邮件地址.

该网站的主机具有正确设置的MX,PTR,SPF和TXT记录,以允许电子邮件发送到托管Exchange服务器的收件箱的电子邮件地址.该网站的主机使用QMail作为实际发送电子邮件的SMTP服务,在所有测试中,QMail在发送电子邮件1和2时都收到成功.mail()函数没有发出错误.

使用IE8,Chrome和FF3.6.17进行本地测试.显示此问题的测试之间的代码没有更改.

在所有测试案例中,电子邮件2(返回提交表单的人)发送得很好.另一方面,电子邮件1只是间歇性地工作.一般模式是第一次联系表单与表单中的每个不同的电子邮件地址一起使用,电子邮件被正常发送,标题和正确.

第二次联系表单与表单中以前使用过的电子邮件地址一起使用时,To param设置为表单中的电子邮件地址,标题都是空白的,尽管To电子邮件地址不正确,但是电子邮件

没收到.该网站的主持人的支持人员可能已经发现了另一个潜在的症状,即在清除cookie之后,所有的电子邮件2都通过了确定.但是,该页面不使用与表单相关的任何cookie.最后,我再次尝试了一段时间(30分钟?),因为电子邮件2没有通过,然后另一次尝试工作,之后电子邮件2再次如上所述搞砸了.

php的mail()函数是否存在已知错误?是否可以使用mail()的最大频率?我不知道为什么代码有时会起作用,有时却不行.该网站的主持人员也处于亏损状态.试图谷歌这个问题似乎出现了人们说使用不同的模块(Swift梅勒,PHPMailer,梨邮件等)的论坛,但由于网站是实时的,我担心重建自动电子邮件代码将

引入超出上述错误的错误.

...编辑6jun11 ...

对不起,不知道我可以编辑我的帖子......

这是最相关的代码:

function UserToSiteEmail( $name, $fromEmail, $message, $kidID, $kidName )
{
    $subject = "Face of Kinder - contact us";
    $headers = GetEmailHeaders($fromEmail);
    $imageFilename = constant("URL_ROOT")."/kidimages/".$kid->ImageFilename;
    $profileUrl = constant("URL_ROOT")."/profile.php?k=".$kid->KidID;
    $body = file_get_contents("EmailTemplates/ContactUs.html");
    $body = str_replace("#FromName#",$name,$body);
    $body = str_replace("#FromEmail#",$fromEmail,$body);
    $body = str_replace("#KidName#",$kidName,$body);
    $body = str_replace("#KidID#",$kidID,$body);
    $body = str_replace("#Message#",$message,$body);
    $body = str_replace("#SiteRoot#",constant("URL_ROOT"),$body);
    return mail(constant("FROM_EMAIL"),$subject,$body,$headers);
}

function GetEmailHeaders( $fromEmail )
{
    $headers = "From: Face of Kinder <" . $fromEmail . ">" . PHP_EOL;
    $headers .= "Reply-To: " . $fromEmail . PHP_EOL;
    $headers .= "Return-Path: " . $fromEmail . PHP_EOL;
    $headers .= 'MIME-Version: 1.0' . PHP_EOL;
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL;

    return $headers;
}
Run Code Online (Sandbox Code Playgroud)

UserToSiteEmail()函数使用联系我们表单中的数据,其中$ fromEmail参数是在表单中输入的电子邮件.从Rackspace在QMail日志中可以找到的内容是,当联系我们表单中的第二次使用相同的电子邮件时,表单中的电子邮件最终位于"收件人"字段中,而不是标题中,电子邮件收件箱的地址中没有不显示任何地方(甚至没有标题 - 即,它没有交换).即使相同的代码正确地将表单的电子邮件放入标题中,并且在第一次提交表单(每个浏览器)的To字段中的电子邮件收件箱地址中也是如此.

如果需要,我可以添加表单的HTML端,但就其过程而言,在将表单提交回自身后,在验证和发送电子邮件之后,php会重定向到感谢页面.我不确定感谢页面后GET和POST变量将如何保留,因为返回页面的唯一方法是再次单击联系表单的链接.要查看当前进程(没有问题 - 因为它似乎只在使用电子邮件收件箱的域时出现),这里是指向页脚的链接,页面中有联系我们链接:http: //www.faceofkinder.com/ home.php.

我认为QMail日志表明失败也有帮助......

342812-web2 qmail-queue-handlers[1147]: Handlers Filter before-queue for qmail started ...
342812-web2 qmail-queue-handlers[1147]: from=
342812-web2 qmail-queue-handlers[1147]: to=orionculver@b-street.co.uk
342812-web2 qmail-queue-handlers[1147]: hook_dir = '/var/qmail//handlers/before-queue'
342812-web2 qmail-queue-handlers[1147]: recipient[3] = 'orionculver@b-street.co.uk'
342812-web2 qmail-queue-handlers[1147]: handlers dir = '/var/qmail//handlers/before-queue/recipient/orionculver@b-street.co.uk'
342812-web2 qmail-queue-handlers[1147]: starter: submitter[1148] exited normally
342812-web2 qmail: 1307092428.798059 bounce msg 18353656 qp 1147
342812-web2 qmail: 1307092428.798116 end msg 18353656
342812-web2 qmail: 1307092428.798338 new msg 18353663
342812-web2 qmail: 1307092428.798366 info msg 18353663: bytes 4902 from <> qp 1148 uid 2522
342812-web2 qmail: 1307092428.800937 starting delivery 2481: msg 18353663 to remote orionculver@b-street.co.uk
342812-web2 qmail: 1307092428.801071 status: local 0/10 remote 2/20
342812-web2 qmail-remote-handlers[1149]: Handlers Filter before-remote for qmail started ...
342812-web2 qmail-remote-handlers[1149]: from=
342812-web2 qmail-remote-handlers[1149]: to=orionculver@b-street.co.uk
342812-web2 qmail: 1307092430.526801 delivery 2481: success: 98.129.184.131_accepted_message./Remote_host_said:_250_OK_BD/F0-16184-DC5A8ED4/
342812-web2 qmail: 1307092430.526909 status: local 0/10 remote 1/20
342812-web2 qmail: 1307092430.526938 end msg 18353663
342812-web2 qmail: 1307092430.576988 delivery 2480: success: 98.129.184.131_accepted_message./Remote_host_said:_250_2.0.0_Ok:_queued_as_6D/F0-16184-DC5A8ED4/
Run Code Online (Sandbox Code Playgroud)
  • O8

war*_*ren 0

听起来您没有清除提交之间的某些$_GET$_POST条目。

您可以复制/粘贴有问题的代码进行验证吗?

  • @Orion:为什么不尝试编辑你的*问题*,并在那里添加代码? (3认同)