Solutions aux e-mails HTML tronqués : 1. Imprimez le contenu du message sur la ligne avant la fonction de messagerie ; 2. Enregistrez le contenu de l'e-mail sous forme de fichier HTML et affichez-le ;
L'environnement d'exploitation de cet article : système Windows 7, version HTML5, ordinateur Dell G3.
Comment résoudre le problème des emails HTML tronqués ? Des caractères tronqués aléatoires apparaissent dans le contenu du courrier
Description du problème :
Assemblez les données (y compris le chinois) au format de fichier HTML et envoyez l'e-mail à l'adresse spécifiée. utilisateur.
Utilisation de la fonction mail en PHP
//拼装header。指定编码utf-8,解析邮件正文中的中文$headers = "From: xxx@xxx\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=utf-8\n"; $headers .= "Content-Transfer-Encoding: 8bit\n";//拼装标题 解决中文标题乱码问题$subject = xxx; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; mail($toEmail,$subject,$message,$headers); // 其中$message为邮件内容主题,格式形如"<html><head></head><body><p>".$title."</p>".$message.$table."</body></html>";
Des caractères tronqués aléatoires, des caractères non spéciaux et des positions aléatoires apparaissent dans le corps de l'e-mail reçu. Les caractères tronqués sont différents lors de l'envoi d'e-mails vers Mac. et recevoir des e-mails sous Windows.
Lorsque les données entrantes sont différentes, parfois tronquées. des caractères apparaîtront, et parfois non, et la comparaison n'a rien à voir avec des caractères spéciaux.
Caractères Windows tronqués tels que :
Dépannage :
1. Confirmez si l'assemblage est incorrect
Imprimez le contenu du message directement dans la ligne précédant la fonction mail au format html complet, enregistrez-le sous forme de fichier html et ouvrez-le. Aucun caractère tronqué, conforme à ce qui est attendu.
2. Confirmez la réception du contenu de l'e-mail
Affichez le fichier source de l'e-mail dans Outlook (vous pouvez cliquer directement sur Mac, mais Windows n'a pas cette fonction , puis enregistrez-le en tant que fichier HTML et affichez-le ), et a constaté que le format des caractères tronqués n'est pas cohérent avec celui de l'étape 1. Par exemple, l'étiquette apparaît
3 Autres
En fait, jusqu'à présent, je me demandais ce qui se faisait exactement dans le courrier. fonction de php, n'est-ce pas ? Bogues sous-jacents cachés dans PHP, qu'est-ce qui a été modifié dans le processus de transmission. Mais je n'ai pas trouvé le code source correspondant à visualiser, et je suis resté longtemps ici.
Parce qu'il s'agit de caractères chinois tronqués, j'ai confirmé à plusieurs reprises que UTF-8 est défini. De nombreux résultats de recherche sont également liés à cela
De plus, la confusion de la position sur Mac a été créée. s'il y a un problème de troncature de transmission, n'est-ce pas ? Trop de temps conduit à un transfert
: https://www.cnblogs.com/puzbus/archive/2013/06/07/3356342.html
Résumer deux points
Question 1 : Quelle est la base de la limite de longueur des e-mails et comment traiter avec des emails longs
php mail La limite supérieure est indiquée dans le document de méthode (j'avais l'impression que si la longueur dépasse la limite, elle serait tronquée, donc je ne m'attendais pas à ce que le tronqué les caractères étaient causés par la longueur)
La méthode de base de php définit la limite supérieure. La base est la RFC 2822 2.1.1.
En même temps, il fournit également des suggestions de traitement, qui consiste à diviser le contenu du texte en plusieurs lignes. La structure HTML assemblée est une ligne, qui dépasse évidemment la longueur.
[Apprentissage recommandé : Tutoriel vidéo HTML]
Question 2 : Pourquoi base64 peut-il résoudre le problème des lignes d'e-mail trop longues ?
1. Pour comprendre ce qu'est base64, reportez-vous aux notes base64 http://www.ruanyifeng.com/blog/2008/06/base64.html En termes simples, les 3 octets en base64 représentent l'ASCII. 4 octets
2. Qu'est-ce que cela a à voir avec les sauts de ligne ? Selon la réglementation RFC822, tous les 76 caractères codés par BASE64Encoder doivent être ajoutés avec un retour chariot et un saut de ligne
Question 3 : Que signifient les différentes valeurs de Content-Transfer-Encoding ?
Référence : notes MIME et https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html
Personnellement compris, les méthodes autres que base64 n'ont aucun effet sur l'insertion de sauts de ligne, le problème ne peut donc pas être résolu
Supplément 1 : Classe de texte a besoin d'un jeu de caractères supplémentaire
Supplémentaire 2 : "=?[Encodage]?B?".base64_encode($subject)."?="; représente base64 Q signifie quoted-printable
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!