Maison  >  Article  >  développement back-end  >  Que dois-je faire si le titre est tronqué lorsque la fonction de messagerie PHP envoie des e-mails chinois codés en UTF-8 ?

Que dois-je faire si le titre est tronqué lorsque la fonction de messagerie PHP envoie des e-mails chinois codés en UTF-8 ?

coldplay.xixi
coldplay.xixioriginal
2020-07-27 09:16:072345parcourir

Solution au titre tronqué lorsque la fonction de messagerie PHP envoie des e-mails chinois codés en UTF-8 : 1. Rendre le texte du sujet conforme aux spécifications de la RFC 2047. 2. Ajouter [content-type] au champ ; en-têtes ; 3. , Configurez correctement l’hôte utilisé pour envoyer les e-mails.

Que dois-je faire si le titre est tronqué lorsque la fonction de messagerie PHP envoie des e-mails chinois codés en UTF-8 ?

Solution à l'en-tête tronqué lors de l'envoi de courrier chinois codé en UTF-8 à l'aide de la fonction de messagerie de PHP :

1. Utilisez la classe Mail de PEAR

La classe Mail de PEAR vous permet de choisir d'utiliser sendmail ou SMTP pour envoyer des lettres. Une telle interface packagée est facile à utiliser et vous n'avez pas besoin de la réinventer. vous-même.

2. Concernant les caractères tronqués du sujet dans les en-têtes

Ne mettez aucun texte autre que l'encodage iso-8859-1 directement dans le sujet. est de le mettre dans le sujet Le texte est conforme à la spécification de RFC 2047 Supposons que l'encodage du texte au niveau de votre sujet est GB2312, alors le sujet correct doit être dans ce format

$headers['subject'] = '=?GB2312?B?' . base64_encode('标题文字') . '?=';

Si. c'est UTF-8, changez le début de ce qui précède Remplacez simplement GB2312 par UTF-8. Il est recommandé d'utiliser l'encodage GB2312 dans le titre, car la différenciation MTA est vraiment sérieuse. La plupart des MSP utilisent des MTA développés par eux-mêmes, et je pense que la plupart des MTA nationaux peuvent de toute façon prendre en charge l'encodage GB2312.

Si vous envoyez vers un MSP étranger, il est recommandé d'utiliser du texte UTF-8 codé en base64 dans le sujet, car il ne prend probablement pas en charge l'encodage GB2312.

3. Assurez-vous d'ajouter le type de contenu

dans les en-têtes de l'e-mail. Le content-type dans les en-têtes de l'e-mail est similaire à celui de. une page web, et elle est également au format text/plain; charset=gb2312. Cette option est principalement utile pour les clients qui reçoivent des e-mails. Elle peut éviter les caractères tronqués sur le client. Certains Webmail encoderont et convertiront également le contenu de l'e-mail en fonction des paramètres définis ici pour l'afficher correctement. Vous pouvez imaginer ce qui se passe lorsque vous utilisez l’encodage gb2312 pour l’envoyer à l’adresse e-mail de .com.tw .

4. Configurez correctement l'hôte que vous utilisez pour envoyer des emails

1) Assurez-vous de configurer la résolution inversée, car la plupart des IP non fixes ne peuvent pas être inversées. , certaines politiques anti-spam utilisent cela comme base de jugement.

2) L'analyse MX doit être configurée, pour la même raison que ci-dessus.

3) Assurez-vous que votre chemin de retour est capable de recevoir les e-mails renvoyés, sinon votre serveur d'envoi d'e-mails pourrait entrer dans la liste noire du destinataire.

$subject = stripslashes($the_post['Title']); 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=utf-8\r\n"; 
$headers .= "Content-Transfer-Encoding: 8bit\r\n"; 
$message = stripslashes(strip_tags($the_post['Content'])); 
mail($to, $subject, $message, $headers);

Utilisez d'abord la fonction base64_encode()—utilisez MIME base64 pour encoder les données

Ajoutez le type d'encodage avant la chaîne de titre Par exemple : =?UTF-8?B?

Ajouter. après la chaîne de titre :?=

Par exemple :

<?php  
 $to = "clairelume@qq.com"; //将此电子邮件地址改为自己的。  
 $name = $_POST[&#39;name&#39;];  
 $email = $_POST[&#39;email&#39;];  
 $subject = "来自博客读者的邮件";  
 $subject = "=?UTF-8?B?".base64_encode($subject)."?=";  
 $headers = "MIME-Version: 1.0\r\n";  
 $headers .= "Content-type: text/plain; charset=utf-8\r\n";  
 $headers .= "Content-Transfer-Encoding: 8bit\r\n";  
 $message = $_POST[&#39;message&#39;];  
 mail($to,$subject,$message,"From: ".$email."",$headers);  
 echo &#39;OK &#39;.$name.&#39;, 您的邮件已发送。&#39;;  
?>

De cette façon, le titre de l'e-mail chinois envoyé ne sera pas tronqué.

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

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