I’m having a challenge with sending emails with arabic content using PHP’s mail function. Let’s say I have this simple arabic string:
بريد
I’ve tried several ways to utilize the headers, but the emails content all still end up with something like: X*X1X(X1Y X/. However, the email subject is correctly encoded if I use arabic characters (thanks to the base64_encode, see function below)
Here’s one of the email functions I’ve tried
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);
}
Any suggestions on alternative ways to achieve this goal?
Unfortunately,
8bitencoding is not reliable in e-mail. Many mail transport agents will remove the top bit of every byte in the mail body.بريدis"\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF"in UTF-8 bytes; remove the top bit from those bytes and you get ASCII"X(X1Y\nX/".The way to get non-ASCII characters into a mail body is to set
Content-Transfer-Encodingto eitherbase64orquoted-printable, and the encode the body withbase64_encodeorquoted_printable_encode, respectively.(
quoted-printableis better if the mail is largely ASCII as it retains readability in the encoded form and is more efficient for ASCII. If the whole mail is Arabic,base64would probably be the better choice.)