4 Stimmen

Wie versende ich E-Mails mit arabischem Inhalt über die Mail-Funktion von PHP?

Ich habe ein Problem mit dem Versenden von E-Mails mit arabischem Inhalt mit der Mail-Funktion von PHP. Sagen wir, ich habe diese einfache arabische Zeichenfolge:

Ich habe verschiedene Möglichkeiten ausprobiert, die Kopfzeilen zu verwenden, aber der Inhalt der E-Mails endet immer noch mit etwas wie: X*X1X(X1Y X/ . Der E-Mail-Betreff wird jedoch korrekt kodiert, wenn ich arabische Zeichen verwende (dank base64_encode, siehe Funktion 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);
}

Haben Sie Vorschläge für alternative Möglichkeiten, dieses Ziel zu erreichen?

0 Stimmen

Ich verstehe das nicht. Wo liegt das Problem? Sie sagen, dass der Betreff der E-Mail korrekt kodiert ist... funktioniert das nicht auch für den Text?

0 Stimmen

Richtig, der E-Mail-Betreff kann durch die Verwendung von base64_encode korrekt angezeigt werden, aber Sie können nicht base64_encode($email_content) verwenden. Siehe die Beispielfunktion oben.

6voto

bobince Punkte 512550

Leider, 8bit Kodierung ist bei E-Mails nicht zuverlässig. Viele Mail-Transportagenten entfernen das oberste Bit jedes Bytes im Mailtext. es "\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF" in UTF-8-Bytes; entfernen Sie das oberste Bit aus diesen Bytes und Sie erhalten ASCII "X(X1Y\nX/" .

Der Weg, Nicht-ASCII-Zeichen in einen Mail-Body zu bekommen, ist die Einstellung Content-Transfer-Encoding entweder zu base64 o quoted-printable und kodieren Sie den Körper mit base64_encode o quoted_printable_encode .

( quoted-printable ist besser, wenn die E-Mail größtenteils aus ASCII besteht, da die Lesbarkeit in der kodierten Form erhalten bleibt und die Effizienz bei ASCII höher ist. Wenn die gesamte Mail arabisch ist, base64 wäre wahrscheinlich die bessere Wahl).

0 Stimmen

Ich habe die Funktion geändert, um base64_encode als Content-Transfer-Encoding zu verwenden: Base64 und OMG! es funktioniert!!! Hurra!

0 Stimmen

Warum ist die 8-Bit-Kodierung in E-Mails nicht zuverlässig? Ich versende regelmäßig UTF-8 kodierte hebräische E-Mails. Welcher MTA entfernt das oberste Bit von jedem Byte im Textkörper?

0 Stimmen

Ehrlich gesagt, ich weiß es nicht mehr - sendmail hat früher nicht funktioniert, aber das ist schon lange her. Mein Bauchgefühl sagt mir, dass die Mobilfunkanbieter vielleicht noch ein 7-Bit-Transport-Kit und eine benutzerdefinierte Mailpfad-Verarbeitung herumliegen haben?

0voto

Sinan Punkte 5639
        $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);

Das hier funktioniert für mich.

0voto

streetparade Punkte 30394

Versuchen Sie dies

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

0voto

Álvaro González Punkte 134708

Ihr Code funktioniert bei mir so, wie er ist.

Sind Sie sicher, dass $message eine gültige UTF-8-Zeichenkette enthält?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X