Здравствуйте, дорогие люди,
Последние 3 дня я потратил на поиск ответа в Интернете, но не смог найти ни одного.
Я нашел много «почти» случаев, но ни один не был именно тем, что я искал.
Я могу получить тему и текст сообщения на иврите, но не могу получить имя прикрепленного файла на иврите.
Кстати, я не заинтересован в сторонних программах, таких как PHPMailer и т. Д.
Вот что я получаю:
W_W (W’W_W_.pdf
Вот что я хочу получить:
שלום. PDF
Вот мой код, очень простой ..
$boundary = uniqid("HTMLEMAIL");
$separator = md5(time());
$eol = PHP_EOL;
// attachment name
$fileName = "שלום.pdf";
var_dump($fileName);
$pdfdoc = $pdf->Output("", "S");
$attachment = chunk_split(base64_encode($pdfdoc));
// main header (multipart mandatory)
$headers = [];
$headers[] = "From: $from";
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-Type: multipart/mixed; boundary=\"".$separator."\"";
$headers[] = "This is a MIME encoded message.";
// message
$msg = "--".$separator.$eol;
$msg .= "Content-Type: text/html; charset=UTF-8".$eol;
$msg .= "Content-Transfer-Encoding: base64".$eol.$eol;
$msg .= chunk_split(base64_encode($message)).$eol.$eol;
// attachment
$msg .= "--".$separator.$eol;
$msg .= "Content-Type: application/pdf; name=\"".$fileName."\"".$eol;
$msg .= "Content-Transfer-Encoding: base64".$eol.$eol;
$msg .= "Content-Disposition: attachment".$eol;
$msg .= $attachment.$eol;
$msg .= "--".$separator."--";
mail($to,'=?UTF-8?B?'.base64_encode($subject).'?=', $msg, implode("\n\r", $headers));
Согласно RFC2047 в параметрах заголовка Content-Type не должно быть кодировок, отличных от ascii.
Согласно RFC2231 вы можете попытаться определить расширенный параметр:
Content-Type: application/pdf; name*=utf-8''%D7%A9%D7%9C%D7%95%D7%9D%2E%70%64%66
Я понятия не имею, насколько хорошо это поддерживается.
Я не могу придумать oneliner для этого, но вы можете попробовать адаптировать этот PHP преобразовать строку в шестнадцатеричное и шестнадцатеричное в строку
Обновление согласно комментариям:
Хотя спецификация явно запрещает это, большинство почтовых клиентов должны понимать следующий формат
'name="?UTF-8?B?' . base64_encode($filename) . '?='
Я предлагаю вам использовать его ради здравомыслия.
Других решений пока нет …