Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn der Titel verstümmelt ist, wenn die PHP-Mail-Funktion UTF-8-codierte chinesische E-Mails sendet?

Was soll ich tun, wenn der Titel verstümmelt ist, wenn die PHP-Mail-Funktion UTF-8-codierte chinesische E-Mails sendet?

coldplay.xixi
coldplay.xixiOriginal
2020-07-27 09:16:072236Durchsuche

Lösung für den verstümmelten Titel, wenn die PHP-Mail-Funktion UTF-8-codierte chinesische E-Mails sendet: 1. Stellen Sie sicher, dass der Text im Betreff den Spezifikationen von RFC 2047 entspricht. 2. Fügen Sie [content-type] hinzu Header; 3. Konfigurieren Sie den zum Senden von E-Mails verwendeten Host korrekt.

Was soll ich tun, wenn der Titel verstümmelt ist, wenn die PHP-Mail-Funktion UTF-8-codierte chinesische E-Mails sendet?

Lösung für den verstümmelten Header beim Senden UTF-8-codierter chinesischer E-Mails mithilfe der Mail-Funktion von PHP:

1. Verwenden Sie die Mail-Klasse von PEAR

Mit der Mail-Klasse von PEAR können Sie wählen, ob Sie Sendmail oder SMTP zum Versenden von Briefen verwenden möchten, und Sie müssen sie nicht neu erfinden selbst. Rad.

2. Bezüglich der verstümmelten Zeichen des Betreffs in den Kopfzeilen

Fügen Sie keinen anderen Text als die Kodierung iso-8859-1 direkt in den Betreff ein ist, es in den Betreff einzufügen. Der Text entspricht der Spezifikation von RFC 2047. Angenommen, die Kodierung des Textes in Ihrem Betreff ist GB2312, dann sollte der richtige Betreff in diesem Format vorliegen

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

Wenn Es ist UTF-8. Ändern Sie den Anfang des oben Gesagten. Ersetzen Sie einfach GB2312 durch UTF-8. Es wird empfohlen, im Titel die GB2312-Kodierung zu verwenden, da die MTA-Differenzierung wirklich schwerwiegend ist. Die meisten MSPs verwenden selbst entwickelte MTAs, und ich glaube, dass die meisten inländischen MTAs die GB2312-Kodierung ohnehin unterstützen können.

Wenn Sie an einen ausländischen MSP senden, wird empfohlen, im Betreff Base64-kodierten UTF-8-Text zu verwenden, da dieser höchstwahrscheinlich die GB2312-Kodierung nicht unterstützt.

3. Fügen Sie unbedingt den Inhaltstyp

in den Kopfzeilen der E-Mail hinzu. Der content-type in den Kopfzeilen der E-Mail ähnelt dem von eine Webseite, und sie hat auch das Format text/plain; charset=gb2312. Diese Option ist vor allem für Clients von Bedeutung, die E-Mails empfangen. Dadurch können verstümmelte Zeichen auf dem Client vermieden werden. Einige Webmailer kodieren und konvertieren den Inhalt der E-Mail auch basierend auf den hier vorgenommenen Einstellungen. Sie können sich vorstellen, was passiert, wenn Sie die gb2312-Kodierung verwenden, um sie an die E-Mail-Adresse von .com.tw zu senden.

4. Konfigurieren Sie den Host, den Sie zum Senden von E-Mails verwenden, korrekt

1) Stellen Sie sicher, dass Sie die umgekehrte Auflösung konfigurieren, da die meisten nicht festen IPs nicht umgekehrt werden können Einige Anti-Spam-Richtlinien nutzen dies als Grundlage für ihre Beurteilung.

2) MX-Parsing muss konfiguriert werden, aus dem gleichen Grund wie oben.

3) Stellen Sie sicher, dass Ihr Rückweg in der Lage ist, zurückgesendete E-Mails zu empfangen, da Ihr E-Mail-Sendeserver sonst möglicherweise auf die schwarze Liste des Empfängers gelangt.

$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);

Verwenden Sie zuerst die Funktion base64_encode() – verwenden Sie MIME base64, um die Daten zu kodieren

Fügen Sie den Kodierungstyp vor der Titelzeichenfolge hinzu: =?UTF-8?B?

Hinzufügen nach der Titelzeichenfolge:?=

Zum Beispiel:

<?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;;  
?>

Auf diese Weise wird der Titel der gesendeten chinesischen E-Mail nicht verfälscht.

Verwandte Lernempfehlungen: PHP-Programmierung vom Einstieg bis zur Beherrschung

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn der Titel verstümmelt ist, wenn die PHP-Mail-Funktion UTF-8-codierte chinesische E-Mails sendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn