gpt4 book ai didi

php - PHP mail()函数中是否存在错误?

转载 作者:可可西里 更新时间:2023-11-01 12:20:22 24 4
gpt4 key购买 nike

我希望有人能够为我提供帮助,因为我对造成问题的原因不知所措。
我们的网站上有一个与我们联系的表格,其中包含姓名,电子邮件, child 的名字, child 的ID和消息的字段。

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

电子邮件1进入托管的交换服务器上的收件箱,其中包含表单字段中的值。

电子邮件2发送给提交表格的人说谢谢-我们会尽快与您联系。

对于电子邮件1,“发件人”,“答复收件人”和“返回路径” header 设置为在表单中输入的电子邮件,并且mail()函数中的“收件人”参数是托管交换服务器的收件箱的电子邮件地址。

对于电子邮件2,“发件人”,“答复收件人”和“返回路径” header 设置为托管交换服务器上收件箱的电子邮件地址,而mail()函数中的“收件人”参数是在表单中输入的电子邮件地址。

该网站的主机已正确设置了MX,PTR,SPF和TXT记录,以允许将电子邮件发送到托管交换服务器的收件箱的电子邮件地址或从该地址接收电子邮件。
该网站的主机使用QMail作为实际发送电子邮件的SMTP服务,并且在所有测试中,当同时发送电子邮件1和2时,QMail都收到了成功。mail()函数未发出任何错误。

本地测试是使用IE8,Chrome和FF3.6.17完成的。在显示此问题的测试之间未更改代码。

在所有测试用例中,都可以很好地发送电子邮件2(返回给提交表单的人)。
另一方面,电子邮件1只能间歇性地工作。通常的模式是,第一次将联系表单与表单中的每个不同电子邮件地址一起使用时,电子邮件会很好地发送,并且标题&正确。

第二次将联系表单与表单中先前使用的电子邮件地址一起使用时,将“收件人”参数设置为表单中的电子邮件地址,标题全部为空,并且尽管“收件人”电子邮件地址不正确,但电子邮件

未收到。
该网站的托管人的支持人员可能还会发现另一种潜在症状,即清除cookie后,所有电子邮件2都可以通过。但是,该页面不使用任何与表单有关的cookie。
最后,在没有通过电子邮件2的情况下,我再次尝试了一段时间(30分钟?),然后又进行了一次尝试,然后再次如上所述将电子邮件2弄乱了。

这些行的php的mail()函数是否存在已知的错误?有没有可以使用mail()的最大频率?
我不知道为什么代码有时可以工作,有时却不能。网站的托管人员也无所适从。
尝试用谷歌搜索这个问题似乎引起了人们的论坛说要使用不同的模块(Swift Mailer,PHPMailer,Pear Mail等),但是随着该网站的上线,我很警惕重建自动电子邮件代码会

引入上述错误之外的其他错误。

...编辑于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;
}

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

我可以根据需要添加表单的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/
  • O8
  • 最佳答案

    根据您的描述,我怀疑问题可能出在标题的行尾。
    从手册中:

    additional_headers (optional)

    ... Multipleextra headers should be separated witha CRLF (\r\n).

    ...Note: If messages are not received,try using a LF (\n) only. Some poorquality Unix mail transfer agentsreplace LF by CRLF automatically(which leads to doubling CR if CRLF isused). This should be a last resort,as it does not comply with » RFC 2822.


    我不确定您定义为PHP_EOL是什么,但是您可以尝试单独使用CRLF或LF。

    关于php - PHP mail()函数中是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6226951/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com