如何通过PHP的邮件功能发送带有阿拉伯语内容的电子邮件?

时间:2010-02-25 15:01:21

标签: php email arabic

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

بريد

我已经尝试了几种方法来使用标题,但电子邮件内容仍然最终会有:X*X1X(X1Y X/。但是,如果我使用阿拉伯字符,则电子邮件主题会被正确编码(感谢base64_encode,请参阅下面的函数)

这是我尝试过的电子邮件功能之一

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

有关实现此目标的替代方法的任何建议吗?

4 个答案:

答案 0 :(得分:6)

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

将非ASCII字符放入邮件正文的方法是将Content-Transfer-Encoding设置为base64quoted-printable,并使用base64_encode或{对正文进行编码分别为{1}}。

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

答案 1 :(得分: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);

这个适合我。

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

您的代码按原样适用于我。

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