Как использовать специальные символы в имени получателей при использовании функции почты PHP

Как отправить электронное письмо с именем "Name <[email protected]>" на:

ŠŒŽœžŸ¥µÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ <[email protected]>

Очевидно, что многие из этих символов никогда не будут отображаться в имени, но в случае их использования я бы предпочел, чтобы они не препятствовали успешному отправке письма.

В настоящее время это не выполняется, как указано в Apache error.log с помощью

Игнорирование недопустимого адреса получателя "Кому:" "¥ μÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ" Транзакция отменена: не указано получателей

Если возможно, я хотел бы сохранить специальные символы "как есть". В противном случае, могу ли я использовать какую-либо функцию транслитерации для очистки имени?

Пример использования:

 <?php
 $to = "ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ <[email protected]>";
 $subject = "Test Subject";
 $body = "Test Body";
 if (mail($to, $subject, $body)) {
   echo("<p>Message successfully sent!</p>");
  } else {
   echo("<p>Message delivery failed...</p>");
  }
 ?>

Ответ 1

mb_encode_mimeheader должен сделать это, как показано в примере:

mb_internal_encoding('UTF-8');

$name  = '山本';
$email = '[email protected]';
$addr  = mb_encode_mimeheader($name, 'UTF-8', 'Q') . " <$email>";

Для лучшей совместимости вы должны установить заголовок Mime-Version: 1.0, чтобы все почтовые клиенты понимали, что вы используете кодировку MIME.

Окончательные заголовки электронной почты должны выглядеть следующим образом:

To: =?UTF-8?Q?=E5=B0=81=E3=83=90=E3=83=BC?= <[email protected]>
Subject: =?UTF-8?Q?=E3=81=93=E3=82=93=E3=81=AB=E3=81=A1=E3=81=AF?=
Mime-Version: 1.0

Относится как:

To: 山本 <[email protected]>
Subject: こんにちは

Связанный: fooobar.com/questions/475237/...

Ответ 2

RFC-821 (2821) сообщает нам, что все и любые 8 бит-данные в поле заголовков должны быть закодированы. Base64 или QuotedPrintable, как хотите и можете. Большинство почтовых читателей автоматически декодируют закодированные строки