Как отправить электронную почту с арабским контентом через почтовую функцию PHP?

У меня возникла проблема с отправкой писем с арабским контентом с использованием почтовой функции 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 кодировка ненадежна по электронной почте. Многие почтовые агенты будут удалять верхний бит каждого байта в теле письма. بريد"\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF" в байтах UTF-8; удалите верхний бит из этих байтов, и вы получите ASCII "X(X1Y\nX/" .

Способ получения символов, отличных от ASCII, в тело почты – это установить Content-Transfer-Encoding на base64 или quoted-printable , а также закодировать тело с base64_encode или quoted_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?