我在与使用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);
}

在替代方式任何建议,以实现这一目标?

有帮助吗?

解决方案

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

要得到非ASCII字符到邮件主体的方法是集Content-Transfer-Encoding要么base64quoted-printable,和编码所述主体分别base64_encodequoted_printable_encode

quoted-printable是更好,如果邮件是很大程度上ASCII,因为它保留在编码形式可读性和为ASCII更有效。如果整个邮件是阿拉伯语,base64很可能是更好的选择。)

其他提示

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

这一个为我工作。

尝试这

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

您的代码对我的作品原样。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top