2013-10-22 36 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」並查看是否獲得了您希望的換行符。