web-dev-qa-db-fra.com

les nouvelles lignes (\ r\n) ne fonctionnent pas dans le corps du courrier électronique

J'utilise la fonction mail () PHP:

    $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);

Quand je reçois cet email, il ressemble à ceci:

CCCC CCCC CCCC CCC CCC CCC CCCC

Je m'attendrais à quelque chose comme ça:

CCCC
CCCC CCCC CCC 
CCC 
CCC 
CCCC

Cela fonctionne très bien sans en-tête "Content-type:". Comment puis-je créer de nouvelles lignes et utiliser ma déclaration Content-type?

39
Verbatus

Vous devez utiliser un <br> car votre content-type est text/html.

cela fonctionne sans l'en-tête content-type car votre e-mail sera alors interprété en texte brut. Si vous voulez vraiment utiliser \n, vous devriez utiliser content-type: text/plain, mais vous perdrez tout balisage.

question similaire ici

75
errieman

Si vous envoyez un courrier électronique HTML, utilisez <BR> (ou <BR />) comme indiqué.
Si vous envoyez un e-mail en texte brut, utilisez % 0D% 0A
\r = % 0D (Ctrl + M = retour chariot)
\n = % 0A (Ctrl + A = saut de ligne)

Si vous avez un lien email dans votre email,
PAR EXEMPLE 

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

Ensuite, utilisez % 250D% 250A

% 25 =%

19
Mark A.

Vous devez utiliser <br> au lieu de \r\n. Pour cela, vous pouvez utiliser l’appel de fonction intégré nl2br Votre code doit donc ressembler à ceci:

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

Si vous utilisez content-type: text/html, vous devez mettre un <br> car votre message sera traité comme un fichier html .

Mais si vous changez votre content-type en text/plain au lieu de text/html, vous pourrez utiliser des caractères \r\n.

4
Nut_Shot

Utiliser <BR>is n'est pas toujours suffisant. MS Outlook 2007 l'ignorera si vous n'indiquez pas à Outlook qu'il s'agit d'une balise HTML à fermeture automatique à l'aide de

 <BR />
1
Windkin

Vous pouvez ajouter un nouveau caractère de ligne dans le type de contenu text/plain à l'aide du code de caractère % 0A.

Par exemple: 

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

Voici le jsfiddle

1
John

Une autre chose utilise "", il y a une différence entre "\ r\n" et '\ r\n'. 

0
Mike Q
' '   

de l'espace manquait dans mon cas, lorsqu'un espace vide ajouté ' \r\n' a commencé à fonctionner

0
Arun Prasad E S

"\ n\r" génère 2 nouvelles lignes tandis que "\ n", "\ r" & "\ r\n" ne produisent que des lignes si, dans l'en-tête, vous utilisez content-type: text/plain.

Attention: Si vous faites le code php suivant:

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

vous obtenez ce qui suit dans le navigateur Windows:

ab
cd
e
f

ab cd e f

et avec content-type: text/plain vous obtenez le texte suivant dans un courrier électronique;

ab
cd
e
f
0
walter1957

Cela a fonctionné pour moi.

$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
Naiguel Developer