PHP邮件头 - 仅使用第一行,其余部分呈现为正文

时间:2010-10-11 06:52:08

标签: php email

很长时间没遇到这个问题,找不到任何解决办法。发生的事情是,我发出的电子邮件偶尔会在正文中显示标题。仔细检查后,标题的第一行被读作标题,但标题的其余部分被认为是正文。它只发生在选定的几个收件人,所以我想知道他们的邮件客户端是否无法正确读取标题。

复制并粘贴样本已损坏的邮件(在邮件中显示为纯文本):

Content-Type: multipart/alternative;boundary="4ca471aa8aed6" From: XXX <XXXX@XXX.com> Message-ID: <1285845418-XXX@XXX.com> X-Mailer: PHP v5.2.14
Date: Thu, 30 Sep 2010 12:16:58 +0100 (BST)
X-Spam: [F=0.2000000000; B=0.500(0); STSI=0.500(-24); STSM=0.500(-24); CM=0.500; MH=0.500(2010093005); S=0.200(2010073001); SC=none]
X-MAIL-FROM: <XXX@XXX.com>
X-SOURCE-IP: [83.138.141.236]
X-AnalysisOut: [v=1.0 c=1 a=x7AK10Bnz50A:10 a=BLceEmwcHowA:10 a=VqisAvswpt]
X-AnalysisOut: [4FyOtI4ClGvg==:17 a=vw80RhgAwbNm-Xx5EKgA:9 a=dX3ThSBsV1pHv]
X-AnalysisOut: [tqXy1oA:7 a=yEJHB1MS_eYZD3xBjjsxBp4tBv8A:4 a=QEXdDO2ut3YA:]
X-AnalysisOut: [10 a=xNwWcUBMj4F1506d:21 a=jABlWf4rlI1j5d6A:21 a=MGaB5ybbA]
X-AnalysisOut: [AAA:8 a=6-7fRTDBl2X58nfIeBAA:9 a=UMAsvBM9vilmjbwRO0EA:7 a=]
X-AnalysisOut: [TNgMOtyArbXF74fBhVb4Pk7RMrwA:4 a=_wpYbfnAMgAA:10 a=iDrULPt]
X-AnalysisOut: [N55ecZwpH:21 a=e4HzzWUux0m5Q-ha:21]

--4ca471aa8aed6 Content-type: text/plain; charset=utf-8

邮件正文在这里......

上述邮件的相应php编码是:

$eol = "\r\n";
$boundary = uniqid();
$headers  = 'MIME-Version: 1.0' . $eol;
$headers .= 'Content-Type: multipart/alternative;boundary="' . $boundary . '"' . $eol;
$headers .= "From: $firstname $lastname <$email>" .$eol;
$headers .= 'Message-ID: <'.time().'-XXX@XXX.com>'.$eol.
  'X-Mailer: PHP v' . phpversion() . $eol;


$subject = "Subject";
$message = "--$boundary$eol";
$message .= "Content-type: text/plain; charset=utf-8$eol$eol;
$message .="Message body here";

请注意,标题中的第一行未显示在电子邮件中。有人以前经历过吗?它只发生在一些收件人,99%的邮件是好的。对于那些有这个问题的人,他们提到他们可以从其他来源接收HTML邮件。另外,我知道其中一个人正在使用IBM Lotus Notes ..那里有任何问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为这是由于您的换行符在Windows服务器上用于hotmail,live和msn。对于其他邮件服务器,您必须使用“\ n”。

答案 1 :(得分:0)

标题中的EOL可以由本地PHP /邮件功能进行预处理。 例如。如果你在Windows上运行系统,\ r \ n有时可以重新转换为\ r \ n \ n \ n,因为软件期望接收“本机风格”\ n并将其更改为“互联网风格” \ r \ n

之后,根据接收方的邮件服务器/邮件客户端,这些“\ r \ n \ n \ n”可以理解为双换行,导致您的问题。

解决方案:使用标题的“本地”换行符样式,例如在Windows上为\ n,在UNIX上为\ r \ n。

忘了提一下:PHP中有一个PHP_EOL常量,在这种情况下应该使用。