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

Cor*_*eus 4 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);
}
Run Code Online (Sandbox Code Playgroud)

关于实现这一目标的替代方法的任何建议?

bob*_*nce 6

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

将非ASCII字符放入邮件正文的方法是将其设置Content-Transfer-Encodingbase64或者quoted-printable,并分别使用base64_encode或对主体进行编码quoted_printable_encode.

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