web-dev-qa-db-ja.com

メール本文で改行(\ r \ n)が機能しない

PHP mail()関数を使用しています:

    $to      = 'AAAA <[email protected]>';
    $subject = 'BBBB';
    $message = "CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC";
    $headers = 'From: DDD<[email protected]>' . "\r\n";
    $headers .= "Content-Type: text/html; charset=\"UTF-8\"; format=flowed \r\n";
    $headers .= "Mime-Version: 1.0 \r\n"; 
    $headers .= "Content-Transfer-Encoding: quoted-printable \r\n";
    mail($to, $subject, $message, $headers);

このメールを受信すると、次のようになります。

CCCC CCCC CCCC CCC CCC CCC CCCC

私はこのようなものを期待しています:

CCCC
CCCC CCCC CCC 
CCC 
CCC 
CCCC


Content-Type HTTPヘッダーがなくても正常に動作します。どうすれば新しい行を作成し、それでも「Content-Type」宣言を使用できますか?

47
Verbatus

<br>Content-Typeであるため、text/htmlを使用する必要があります。

電子メールはplain textとして解釈されるため、Content-Typeヘッダーなしで機能します。 \nを本当に使用する場合は、Content-Type: text/plainを使用する必要がありますが、マークアップは失われます。

同様の質問 here も確認してください。

87
errieman

HTMLメールを送信する場合は、前述のとおり<BR>(または<BR />、または</BR>)を使用します。
プレーンテキストのメールを送信する場合は、%0D%0Aを使用します
\r = %0D(Ctrl + M =キャリッジリターン)
\n = %0A(Ctrl + A =改行)

メールにメールリンクがある場合は、
例えば

<A HREF="mailto?To=...&Body=Line 1%250D%250ALine 2">Send email</A>

次に、%250D%250Aを使用します

%25 =%

21
Mark A.

<br>の代わりに\r\nを使用する必要があります。このためには、組み込みの関数呼び出し nl2br を使用できます。したがって、コードは次のようになります。

 $message = nl2br("CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC");
6
Sanoob

content-type: text/htmlを使用する場合は、メッセージがhtmlファイルのように脅かされるため、<br>を追加する必要があります。

ただし、content-typeの代わりにtext/plaintext/htmlに変更すると、\r\n文字を使用できます。

4
Nut_Shot

<BR>を使用するだけでは十分ではありません。 MS Outlook 2007は、Outlookに自己終了htmlタグであることを使用して通知しない場合、これを無視します。

 <BR />
1
Windkin

%0A文字コードを使用して、text/plainコンテンツタイプに改行文字を追加できます。

例えば:

<a href="mailto:[email protected]?subject=Hello%20again&body=HI%20%0AThis%20is%20a%20new%20line"/>

これが jsfiddle です

1
John

メール関数のテキスト/プレーンテキストメールでは、PHP_EOL定数を確実に使用します。
text/htmlテキストの場合:

$messagePLAINTEXT="This is my message."
. PHP_EOL .
"This is a new line in plain text";

$messageHTML="This is my message."
. PHP_EOL . "<br/>" .
"This is a new line in html text, check line break in code view";

$messageHTML="This is my message."
. "<br/>" .
"This is a new line in html text, no line break in code view";
0
DrOne

もう1つは「」を使用していますが、「\ r\n」と「\ r\n」には違いがあります。

0
Mike Q
' '   

空白が追加された' \r\n'が機能し始めたとき、私の場合はスペースがありませんでした

0
Arun Prasad E S

「\ n\r」は2つの新しい行を生成し、「\ n」、「\ r」および「\ r\n」は、ヘッダーでcontent-type: text/plainを使用する場合、単一行を生成します。

注意:次のphpコードを実行する場合:

    $message='ab<br>cd<br>e<br>f';
print $message.'<br><br>';
    $message=str_replace('<br>',"\r\n",$message);
print $message;

windowsブラウザーで以下を取得します。

ab
cd
e
f

ab cd e f

content-type: text/plainを使用すると、電子メール出力で次のようになります。

ab
cd
e
f
0
walter1957

これは私のために働いた。

$message  = nl2br("
===============================\r\n
www.domain.com \r\n
===============================\r\n
From: ".$from."\r\n
To: ".$to."\r\n
Subject: ".$subject."\r\n
Message: ".$_POST['form-message']);
0