2013-10-22 35 views
0

所以,我的问题是,我试图通过PHP发送邮件。我希望所有这些帖子都在一行上。然而,使用$ header =“content-type:text/plain; charset = utf-8 \ r \ n”;这似乎不可能。当然,如果我删除那段代码,我不能在邮件中显示åäö。我已经在这2天了。PHP字符集和“ n”

<?php 

$to = "[email protected]"; 
$subject = "Bokning från hemsidan."; 
$header = "Content-type: text/plain; charset=utf-8\r\n"; 
$header .= "From: [email protected]\r\n"; 
$body = "En bokning:" . "\n\n" . 
    $_POST["namn"] . "\n" . 
    $_POST["mobilnummer"] . "\n" . 
    $_POST["hemnummer"] . "\n" . 
    $_POST["email"] . "\n" . 
    $_POST["gatuadress"] . "\n" . 
    $_POST["postnummer"] . "\n" . 
    $_POST["vaning"] . "\n" . 
    $_POST["portkod"] . "\n" . 
    $_POST["bokningsdag"] . "\n" . 
    $_POST["byggstadning"] . "\n" . 
    $_POST["flytthjalp"] . "\n" . 
    $_POST["flyttstadning"] . "\n" . 
    $_POST["typavbostad"] . "\n" . 
    $_POST["fonsterputsning"] . "\n" . 
    $_POST["kontorsstadning"] . "\n" . 
    $_POST["rojningbortforsling"] . "\n" . 
    $_POST["visningsstad"] . "\n" . 
    $_POST["dodsbo"] . "\n" . 
    $_POST["boyta"] . "\n" . 
    $_POST["kallare"] . "\n" . 
    $_POST["vind"] . "\n" . 
    $_POST["totalkvm"] . "\n" . 
    $_POST["garage"] . "\n" . 
    $_POST["forrad"] . "\n" . 
    $_POST["veranda"] . "\n" . 
    $_POST["balkongglas"] . "\n" . 
    $_POST["balkongejglas"] . "\n" . 
    $_POST["friggebod"] . "\n" . 
    $_POST["fakgatuadress"] . "\n" . 
    $_POST["fakpostnummer"] . "\n" . 
    $_POST["jarut"] . "\n" . 
    $_POST["nejrut"] . "\n" . 
    $_POST["meddelande"]; 


if($_POST){ 
    mail($to, $subject, $body, $header); 
    $feedback = "Tack för din bokning! Vi kommer att kontakta dig inom kort via mail eller telefon för att bekräfta din bokning. Vid bråskande ärenden var vänlig ring kontoret. Våra telefontider är 8.00-12.30."; 
} 
?> 
+0

这怎么样似乎不可能?您尝试时究竟发生了哪些故障?发布失败的代码。发布错误消息。发布失败的描述。发布重现步骤。 – atk

+0

似乎不可能的是把这两件事结合起来。这意味着,都能够看到åäö等,并把邮件写在单独的线上,只有一个像它现在变成 –

+0

您仍然需要回答我的评论的其余部分。重复自己并不能澄清事情。添加额外的细节要求补充澄清 – atk

回答

1

\ r \ n适用于电子邮件换行符,所要求的RFC2822

消息被分为行字符。一行是一系列 字符,用两个字符carriage-return 和换行符分隔;即紧跟换行符(LF)字符(ASCII 值10)的回车(CR)字符(ASCII 值13)。 (该回车/换行对通常写在 本文件为“CRLF”)

参见:Comment on php.net关于“低质量的Unix的MTA”需要的\ n代替\ r \ n

\r是CR,\n是LF在PHP

我也许应该指出,这仅适用于Content-Type:text/plain,但邮件系统都应该是建立从互联网工程任务组包括符合所有相关的RFC上述部分。如果您要发送HTML,请改为使用<BR />

+1

只有标题部分和MIME内容分隔符才需要'\ r \ n'。消息体可以有任何他们想要的换行符。 – Sammitch

+0

就我所知,GMail主机无法与'\ r \ n'配合使用。它应该是一个'\ n'。 – MahanGM

+0

从[php.net上的邮件](http://php.net/manual/en/function.mail.php)的评论 - 如果没有收到邮件,请尝试仅使用LF(\ n)。一些质量差的Unix邮件传输代理会自动用CRLF代替LF(如果使用CRLF,会导致CR翻倍)。这应该是最后的手段,因为它不符合RFC 2822. –

0

根据php.net,您必须用“\ r \ n”分隔每一行。

+1

只有头段和MIME内容分隔符才需要'\ r \ n'。消息体可以有任何他们想要的换行符。 – Sammitch

0

正如其他人所提到的,\ r \ n是电子邮件标题的换行符。如果您查看“Newline”上的Wikipedia页面,您会看到该角色的多个表示。基于ASCII或兼容的字符集或者LF (换行, '\ n',的0x0A,10十进制)或CR(回车,

系统 '\ R', 0X0D,13在十进制)单独,或CR接着LF(CR + LF, '\ r \ N',0x0D0A)

Unicode标准定义了大量 符合应用程序应该承认行终止字符:[4]
LF:换行,U + 000A
...
CR:回车n,U + 000D

您可以尝试在UTF-8主体中传递“\ 0 \ r \ 0 \ n”并查看是否获得了您希望的换行符。