Frage

Ich habe eine Herausforderung mit E-Mail mit arabischen Inhalten mit PHP-Mail-Funktion zu senden. Lassen Sie uns sagen, ich habe diese einfache arabische string:

بريد

Ich habe mehr Möglichkeiten versucht, die Überschriften zu verwenden, aber der E-Mails Inhalt alle noch mit so etwas wie am Ende: X*X1X(X1Y X/. Allerdings ist die E-Mail-Betreff korrekt codiert, wenn ich arabische Schriftzeichen (dank der base64_encode siehe Funktion unten) verwenden

Hier ist eine der E-Mail-Funktionen, die ich versucht 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 auf alternative Möglichkeiten, um dieses Ziel zu erreichen?

War es hilfreich?

Lösung

Leider ist 8bit Codierung nicht zuverlässig in E-Mail. Viele Mail-Transport-Agenten werden die Top-Bit jedes Byte in dem Mail-Körper entfernen. بريد ist "\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF" in UTF-8-Bytes; entfernen Sie die obere Bit aus diesem Bytes und Sie ASCII "X(X1Y\nX/" erhalten.

Die Art und Weise Nicht-ASCII-Zeichen in einen Mail-Körper zu erhalten ist, Satz Content-Transfer-Encoding zu beiden base64 oder quoted-printable und die Codier der Körper mit base64_encode oder quoted_printable_encode sind.

(quoted-printable ist besser, wenn die Post weitgehend ASCII ist, wie es die Lesbarkeit in der codierten Form behält und ist effizienter für ASCII. Wenn die ganze Mail-Arabisch ist, würde base64 wahrscheinlich die bessere Wahl sein.)

Andere Tipps

        $boundary = uniqid(rand(), true);

        $headers  = "From: $from\n";
        $headers .= "MIME-Version: 1.0\n";
        $headers .= "Content-Type: multipart/alternative; boundary = $boundary\n";
        $headers .= "This is a MIME encoded message.\n\n";
        $headers .= "--$boundary\n" .
                    "Content-Type: text/plain; charset=UTF-8 \n" .
                    "Content-Transfer-Encoding: base64\n\n";
        $headers .= chunk_split(base64_encode($plaintext));
        $headers .= "--$boundary\n" .
                    "Content-Type: text/html; charset=ISO-8859-1\n" .
                    "Content-Transfer-Encoding: base64\n\n";
        $headers .= chunk_split(base64_encode($msg));
        $headers .= "--$boundary--\n" .


        mail($address, $subject, '', $headers);

Dies funktioniert für mich.

Versuchen Sie diese

$headers .= 'From: =?UTF-8?B?'.base64_encode($from). "\r\n";

Der Code funktioniert für mich, wie sie ist.

Sind Sie sicher, dass $message einen gültigen UTF-8-String?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top