使用PHP发送跨平台电子邮件,如何处理换行?
当使用PHP使用PHP发送跨平台电子邮件,如何处理换行?,php,email,cross-platform,sendmail,eol,Php,Email,Cross Platform,Sendmail,Eol,当使用PHPmail()函数创建发送电子邮件的脚本时,我遇到了一些新的问题。Unix系统上的PHP希望标题用LF字符分隔,不管怎么说,sendmail然后用正确的CRLF替换它们。但是,在Windows上,消息和标题是按照提供的方式发送的。这是在一篇文章中描述的 因此,为了在Windows上使用LF和CRLF,我需要一种检测系统是否运行Unix版本的sendmail的方法。我知道PHP\u EOL,但我想知道是否有更优雅的方法来处理这个问题 目前,我正在构建我的消息,正如文档所指定的那样 <
mail()
函数创建发送电子邮件的脚本时,我遇到了一些新的问题。Unix系统上的PHP希望标题用LF
字符分隔,不管怎么说,sendmail然后用正确的CRLF
替换它们。但是,在Windows上,消息和标题是按照提供的方式发送的。这是在一篇文章中描述的
因此,为了在Windows上使用LF
和CRLF
,我需要一种检测系统是否运行Unix版本的sendmail的方法。我知道PHP\u EOL
,但我想知道是否有更优雅的方法来处理这个问题
目前,我正在构建我的消息,正如文档所指定的那样
<?php
$to = "example@website.com";
$subject = "Email Subject Here";
$message = "Hello this is a plaintext\n message with a line break.";
$headers = array(
"From: webmaster@example.com",
"Reply-To: webmaster@example.com",
"X-Mailer: PHP/" . phpversion()
);
$success = mail($to, $subject, $message, join("\r\n", $headers));
if ($success) {
echo "Mail Sent\n";
} else {
echo "Mail Failed\n";
}
当它被传递到sendmail时,所有LF
被替换为CRLF
,导致重复的回车。然后,一些邮件服务器将此附加的CR
替换为CRLF
,从而产生附加的换行符,在本例中,在From:
之后的所有标题现在都是邮件正文的一部分
PHP实际上插入了带有不正确行尾的X-PHP-origing-Script
标题,这是一个次要问题,但仍然很烦人实际上是一个PHP5.3错误,现已修复
有没有关于处理这个跨平台问题的理想方法的想法
谢谢
Aron这在早期的5.3版本中是一个相当短暂的缺陷
升级PHP这在早期的5.3版本中是一个相当短暂的缺陷
升级你的PHP啊,谢谢,我更新了我的问题来反映这一点。我仍在寻找一种方法来处理Unix和Windows上的
mail()
所需的不同行尾。谢谢,我更新了我的问题以反映这一点。我仍在寻找一种方法来处理Unix和Windows上的mail()
所需的不同行尾
To: example@website.comLF
Subject: Email Subject HereLF
X-PHP-Originating-Script: 501:mail.phpLF
From: webmaster@example.comCRLF
Reply-To: webmaster@example.comCRLF
X-Mailer: PHP/5.3.1LF
LF
Hello this is a plaintextLF
message with a line break.LF