Wie sende ich E-Mails mit Arabisch-Inhalte via PHP-mail Funktion?
Ich habe eine Herausforderung mit dem Versand von E-Mails mit Arabisch-Inhalte mit Hilfe von PHP-mail-Funktion. Lassen Sie uns sagen, dass ich diese einfache Arabische Zeichenfolge:
بريد
Ich habe versucht, mehrere Möglichkeiten zu nutzen, um den Header, aber die E-Mails Inhalte alle noch am Ende mit etwas wie: X*X1X(X1Y X/
. Aber der Betreff einer E-Mail richtig codiert ist, wenn ich mit arabischen Zeichen (Dank der base64_encode, siehe Funktion weiter unten)
Hier ist eine der E-Mail-Funktionen, die ich ausprobiert habe
function sendSimpleMail($to,$from,$subject,$message) {
$headers = 'MIME-Version: 1.0' ."\r\n";
$headers .= 'To: '.$to ."\r\n";
$headers .= 'From: '.$from . "\r\n";
$headers .= 'Content-type: text/plain; charset=UTF-8; format=flowed' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'."\r\n";
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=',$message, $headers);
}
Irgendwelche Vorschläge zu alternativen Möglichkeiten, um dieses Ziel zu erreichen?
- Ich verstehe es nicht. Was ist das problem? Sie sagen, dass die e-mail-Betreff ist richtig codiert... tut es nicht für den Körper als auch?
- Korrekt, die E-Mail-Betreff richtig angezeigt werden, indem Sie mit base64_encode, aber Sie nicht verwenden können, base64_encode($email_content). Beispiel siehe Funktion oben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider
8bit
Codierung ist nicht zuverlässig in der e-mail. Viele E-mail-transport-Agenten zu entfernen wird das oberste bit von jedem byte im mail-body.بريد
ist"\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF"
im UTF-8-bytes; entfernen Sie die Obere etwas von denen bytes und erhalten Sie ASCII -"X(X1Y\nX/"
.Den Weg, um nicht-ASCII-Zeichen in eine E-mail-Körper setzen
Content-Transfer-Encoding
entwederbase64
oderquoted-printable
, und das codieren der Körper mitbase64_encode
oderquoted_printable_encode
bzw.(
quoted-printable
ist besser, wenn die E-mail ist weitgehend ASCII als es behält die Lesbarkeit in der codierten form und ist effizienter für ASCII. Wenn die ganzen E-mail-Arabischbase64
wäre wahrscheinlich die bessere Wahl.)Dieser arbeitet für mich.
Versuchen, diese
Dein code funktioniert bei mir wie Sie ist.
Sind Sie sicher, dass
$message
enthält eine gültige UTF-8-string?