Maison >interface Web >Questions et réponses frontales >Comment résoudre le problème des e-mails HTML tronqués

Comment résoudre le problème des e-mails HTML tronqués

藏色散人
藏色散人original
2021-06-03 14:11:112724parcourir

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 ;

Comment résoudre le problème des e-mails HTML tronqués

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.

  • windows : apparaître à un endroit aléatoire ? ou!
  • Mac : L'emplacement des données n'est pas cohérent avec les données entrantes. Par exemple, il doit être xxxxAxxxxBxxxxx et l'e-mail reçu est xxxxBxxxxAxxxx

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

  • Un contenu excessif des e-mails entraînera des problèmes d'analyse
  • Solution : Content-Transfer-Encoding : base64

Supplément de révision :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn