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

2024-01-09

我在使用 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电子邮件中的编码不可靠。许多邮件传输代理会删除邮件正文中每个字节的最高位。بريد is "\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF"以 UTF-8 字节为单位;从这些字节中删除最高位,您将得到 ASCII"X(X1Y\nX/".

将非 ASCII 字符放入邮件正文的方法是设置Content-Transfer-Encoding到任一base64 or quoted-printable,并对主体进行编码base64_encode or quoted_printable_encode, 分别。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 PHP 的邮件功能发送包含阿拉伯语内容的电子邮件? 的相关文章

随机推荐