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.
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['name']; $email = $_POST['email']; $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['message']; mail($to,$subject,$message,"From: ".$email."",$headers); echo 'OK '.$name.', 您的邮件已发送。'; ?>
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!