4

我在使用 PHP 的邮件功能发送带有阿拉伯内容的电子邮件时遇到了挑战。假设我有这个简单的阿拉伯字符串:

4

4 回答 4

6

不幸的是,8bit电子邮件中的编码并不可靠。许多邮件传输代理会删除邮件正文中每个字节的最高位。بريد"\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF"UTF-8 字节;从这些字节中删除最高位,你会得到 ASCII "X(X1Y\nX/"

将非 ASCII 字符放入邮件正文的方法是设置Content-Transfer-Encodingbase64or ,并分别使用orquoted-printable对正文进行编码。base64_encodequoted_printable_encode

quoted-printable如果邮件主要是 ASCII 更好,因为它保留了编码形式的可读性并且对 ASCII 更有效。如果整个邮件是阿拉伯语,base64可能是更好的选择。)

于 2010-02-25T15:15:02.973 回答
0
        $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);

这个对我有用。

于 2010-02-25T15:08:31.317 回答
0

试试这个

$headers .= 'From: =?UTF-8?B?'.base64_encode($from). "\r\n";
于 2010-02-25T15:10:48.893 回答
0

您的代码按原样为我工作。

您确定它$message包含有效的 UTF-8 字符串吗?

于 2010-02-25T15:20:28.813 回答