php mail()存在问题-发件人名称不为';不能正确显示

php mail()存在问题-发件人名称不为';不能正确显示,php,email,Php,Email,大家好 我在我的网页上有一个联系方式,到目前为止还可以 唯一的问题是,在我的邮件程序中,“发件人”字段中的名称显示不正确,尽管电子邮件的源代码似乎正确: From: Metaldemos <hello@metaldemos.com> Reply-To: Metaldemos <hello@metaldemos.com> From:Metaldemos 答复:Metaldemos 无论如何,在邮件程序中,名称是“hello” 在php中,我使用以下标题: $header

大家好

我在我的网页上有一个联系方式,到目前为止还可以

唯一的问题是,在我的邮件程序中,“发件人”字段中的名称显示不正确,尽管电子邮件的源代码似乎正确:

From: Metaldemos <hello@metaldemos.com>
Reply-To: Metaldemos <hello@metaldemos.com>
From:Metaldemos
答复:Metaldemos
无论如何,在邮件程序中,名称是“hello”

在php中,我使用以下标题:

$headers="Mime-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: quoted-printable\nFrom: Metaldemos <hello@metaldemos.com>\nReply-To: Metaldemos <hello@metaldemos.com>\nReturn-Path: Metaldemos <hello@metaldemos.com>\n";
$headers=“Mime版本:1.0\n内容类型:text/plain;charset=UTF-8\n内容传输编码:引用可打印\n从:Metaldemos\n复制到:Metaldemos\n返回路径:Metaldemos\n”;
以及发送邮件的代码:

mail($email, $subject, $mailbody, $headers,"-t -i -f Metaldemos <hello@metaldemos.com>");
mail($email、$subject、$mailbody、$headers,“-t-i-f Metaldemos”);
你知道我该怎么解决这个问题吗

格里茨&谢谢


Maenny

尝试添加回车符和换行符。我知道,当我编写PHP脚本发送邮件时,我会执行以下类似操作:

...
$headers.= "From: John Doe <john.doe@example.com>\r\n";
$headers.= "Reply-To: Jane Doe <jane.doe@example.com>\r\n";
...
if (mail($to, $subject, $message, $headers)) {
    // email sent
}
else {
    // email failed
}
。。。
$headers.=“发件人:John Doe\r\n”;
$headers.=“回复:Jane Doe\r\n”;
...
if(邮件($to、$subject、$message、$headers)){
//发送电子邮件
}
否则{
//电子邮件失败
}

尝试添加回车符和换行符。我知道,当我编写PHP脚本发送邮件时,我会执行以下类似操作:

...
$headers.= "From: John Doe <john.doe@example.com>\r\n";
$headers.= "Reply-To: Jane Doe <jane.doe@example.com>\r\n";
...
if (mail($to, $subject, $message, $headers)) {
    // email sent
}
else {
    // email failed
}
。。。
$headers.=“发件人:John Doe\r\n”;
$headers.=“回复:Jane Doe\r\n”;
...
if(邮件($to、$subject、$message、$headers)){
//发送电子邮件
}
否则{
//电子邮件失败
}

以上答案是正确的。您需要在“发件人”和“答复收件人”行的末尾\r\n输入。以及所有其他标题行的末尾

根据(第2.3.8.节行)

行由零个或多个以 序列ASCII字符“CR”(十六进制值0D),后跟 ASCII字符“LF”(十六进制值0A)。此终止序列为 如本文件所示。一致性实现必须 无法识别或生成任何其他字符或字符序列 作为行终止符。可通过以下方式对线路长度施加限制: 服务器(见第4节)

此外,文本中出现“裸”、“CR”或“LF”字符 (即,两者中的任何一个都没有另一个)有很长的引发历史 邮件实现和使用邮件的应用程序中的问题 系统作为一种工具。SMTP客户端实现不能传输数据 这些字符用作行终止符时除外 然后必须,如上所述,仅作为 顺序

所以你的标题行是:

$headers="Mime-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: quoted-printable\nFrom: Metaldemos <hello@metaldemos.com>\nReply-To: Metaldemos <hello@metaldemos.com>\nReturn-Path: Metaldemos <hello@metaldemos.com>\n";
$headers=“Mime版本:1.0\n内容类型:text/plain;charset=UTF-8\n内容传输编码:引用可打印\n从:Metaldemos\n复制到:Metaldemos\n返回路径:Metaldemos\n”;
无效,HTTP或SMTP头必须始终以\r\n而不仅仅是\r\n或\r\n结尾

正确的路线是

$headers="Mime-Version: 1.0\r\n";
$headers.="Content-Type: text/plain; charset=UTF-8\n";
$headers.="Content-Transfer-Encoding: quoted-printable\n";
$headers.="From: Metaldemos <hello@metaldemos.com>\n";
$headers.="Reply-To: Metaldemos <hello@metaldemos.com>\n";
$headers.="Return-Path: Metaldemos <hello@metaldemos.com>\n";
$headers=“Mime版本:1.0\r\n”;
$headers.=“内容类型:文本/普通;字符集=UTF-8\n”;
$headers.=“内容传输编码:可打印引用\n”;
$headers.=“From:Metaldemos\n”;
$headers.=“回复:Metaldemos\n”;
$headers.=“返回路径:Metaldemos\n”;
你可以把它放在一条长线上,很好,我只是把它分开,让它更清楚


它以前不起作用的原因是,您只需更改“发件人”和“回复收件人”,您就必须更改所有收件人。

上述答案是正确的。您需要在“发件人”和“答复收件人”行的末尾\r\n输入。以及所有其他标题行的末尾

根据(第2.3.8.节行)

行由零个或多个以 序列ASCII字符“CR”(十六进制值0D),后跟 ASCII字符“LF”(十六进制值0A)。此终止序列为 如本文件所示。一致性实现必须 无法识别或生成任何其他字符或字符序列 作为行终止符。可通过以下方式对线路长度施加限制: 服务器(见第4节)

此外,文本中出现“裸”、“CR”或“LF”字符 (即,两者中的任何一个都没有另一个)有很长的引发历史 邮件实现和使用邮件的应用程序中的问题 系统作为一种工具。SMTP客户端实现不能传输数据 这些字符用作行终止符时除外 然后必须,如上所述,仅作为 顺序

所以你的标题行是:

$headers="Mime-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: quoted-printable\nFrom: Metaldemos <hello@metaldemos.com>\nReply-To: Metaldemos <hello@metaldemos.com>\nReturn-Path: Metaldemos <hello@metaldemos.com>\n";
$headers=“Mime版本:1.0\n内容类型:text/plain;charset=UTF-8\n内容传输编码:引用可打印\n从:Metaldemos\n复制到:Metaldemos\n返回路径:Metaldemos\n”;
无效,HTTP或SMTP头必须始终以\r\n而不仅仅是\r\n或\r\n结尾

正确的路线是

$headers="Mime-Version: 1.0\r\n";
$headers.="Content-Type: text/plain; charset=UTF-8\n";
$headers.="Content-Transfer-Encoding: quoted-printable\n";
$headers.="From: Metaldemos <hello@metaldemos.com>\n";
$headers.="Reply-To: Metaldemos <hello@metaldemos.com>\n";
$headers.="Return-Path: Metaldemos <hello@metaldemos.com>\n";
$headers=“Mime版本:1.0\r\n”;
$headers.=“内容类型:文本/普通;字符集=UTF-8\n”;
$headers.=“内容传输编码:可打印引用\n”;
$headers.=“From:Metaldemos\n”;
$headers.=“回复:Metaldemos\n”;
$headers.=“返回路径:Metaldemos\n”;
你可以把它放在一条长线上,很好,我只是把它分开,让它更清楚


它以前不起作用的原因是,您只需更改“发件人”和“回复收件人”,您就必须更改所有的收件人。

您可以尝试将名称用双引号括起来吗?是的,我试过了,没有用。同样的结果。你能试着把名字用双引号引起来吗?是的,我试过了,没用。同样的结果。嗨,谢谢你的回复。我担心这并没有起到作用,它甚至将From和Replay To从标题中分离出来,并将其保留在邮件正文中……嗨,谢谢你的回复。恐怕这并没有起作用,它甚至将From和Replay To从标题中分离出来,并将其保留在消息正文中…您在上一个示例中忘记了
\r\n
。您忘记了
\r\n