[RESOLU] La fonction MAIL génère des césures régulières

Eléphant du PHP | 80 Messages

24 mai 2019, 09:49

Bonjour,

J'utilise donc la fonction mail avec les entetes de ce type :
		$boundary = md5(uniqid(rand(), true));
		$entetes = utf8_decode("From: XXX<[email protected]>\n");
		$entetes .= "Reply-To: [email protected]\n";
		$entetes .= "Bcc: [email protected]"."\n";
		$entetes .= 'Content-Type: multipart/mixed;'."\n".' boundary="'.$boundary.'"'."\n";

		$body = 'This is a multi-part message in MIME format.'."\n";
		$body .= '--'.$boundary."\n";
		$body .= 'Content-Type: text/html; charset="UTF-8"'."\n";
		$body .= "\n";
		$body .= $message;
		$body .= "\n";
Le $message est en format HTML, avec tableaux, couleurs et touti-quanti.

Sauf que lorsque ce message atteint une certaine longueur (tous les 975/977 caractères), j'ai une césure qui se crée en mettant un 'espace et retour charriot' dans l'html, générant des trucs du style :
"samedi suivant :&nb
sp;N° 5" (un espace dans le &nbsp faisant en sorte que celui-ci ne soit plus reconnu comme tel;
Une césure comme celle-ci : "<s
pan style='color:orange;font-size:10px'>" générant automatiquement un texte barré à partir de cet endroit"

Y'a-t'il une information dans les entêtes qui soit propice à générer ces césures ?
Lorsque je fais un echo du $message, bien sur, celui-ci est correct. Ce n'est qu'une fois passé par la fonction mail que ces césures apparaissent.

Si vous avez une idée, je suis preneur !!

En vous remerciant, Stéphane

Avatar du membre
Mammouth du PHP | 1609 Messages

24 mai 2019, 16:23

Salut, le problème me paraît assez étrange et pourtant j'en ai fait un paquet d'envoi de mail avec php et j'ai jamais vu ça.
Question bête mais ta variable message contient-elle des retours à la ligne ? le contenu n'est-il pas peut être intégralement sur une seule ligne ? si c'est le cas ne suffirait-il pas que le contenu de $message soit sur plusieurs lignes ?
Développeur web depuis + de 20 ans

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 mai 2019, 16:50

C'est la norme RFC 5322 qui impose une limite de caractères sur une même ligne.
2.1.1 Line Length Limits

There are two limits that this specification places on the number of
characters in a line. Each line of characters MUST be no more than
998 characters
, and SHOULD be no more than 78 characters
, excluding
the CRLF.

The 998 character limit is due to limitations in many implementations
that send, receive, or store IMF messages which simply cannot handle
more than 998 characters on a line.
Source : https://tools.ietf.org/html/rfc5322#section-2.1.1
Présentation en français : https://www.bortzmeyer.org/5322.html

Du coup il faut que tu fasses des retours chariots pour que ça passe.



:arrow: Ma recommandation pour les emails HTML est de ne pas les envoyer par la fonction mail() de PHP directement mais de passer par une librairie type PHPmailer qui va justement gérer automatiquement ce genre de cas particuliers et permettre à tes mail d'être envoyés avec le moins de risque de tomber en spam
https://github.com/PHPMailer/PHPMailer
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 80 Messages

21 juil. 2019, 17:47

Désolé de ne pas avoir validé et remercié avant !!
En effet, nickel, quelque \r\n par-ci par là, et tout rentre dans l'ordre !!

Merci encore !