使用PHP的邮件功能时如何在收件人名称中使用特殊字符

Cit*_*guy 12 php email character-encoding

如何将格式为" Name <user@example.com>" 的电子邮件发送到:

ŠŒŽœžŸ¥µÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ <user@example.com>
Run Code Online (Sandbox Code Playgroud)

显然,许多这些字符永远不会出现在名称中,但如果它们出现,我宁愿他们也不会阻止电子邮件成功发送.

目前,这在Apache的error.log中注明失败

忽略无效的"收件人:"收件人地址'¥μÀÁÃÂÃÃ¼ÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ''交易已中止:未指定收件人

如果可能的话,我想保留特殊字符"原样".否则,我可以使用某种音译功能来清理名称吗?

用法示例:

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

dec*_*eze 19

mb_encode_mimeheader 应该这样做,就像示例中所示:

mb_internal_encoding('UTF-8');

$name  = '??';
$email = 'yamamoto@example.com';
$addr  = mb_encode_mimeheader($name, 'UTF-8', 'Q') . " <$email>";
Run Code Online (Sandbox Code Playgroud)

为了获得更好的兼容性,您应该设置标头,Mime-Version: 1.0以便所有邮件客户端都了解您正在使用MIME编码.

最终的电子邮件标题应如下所示:

To: =?UTF-8?Q?=E5=B0=81=E3=83=90=E3=83=BC?= <yamamoto@example.com>
Subject: =?UTF-8?Q?=E3=81=93=E3=82=93=E3=81=AB=E3=81=A1=E3=81=AF?=
Mime-Version: 1.0
Run Code Online (Sandbox Code Playgroud)

呈现为:

To: ?? <yamamoto@example.com>
Subject: ?????
Run Code Online (Sandbox Code Playgroud)

相关:https://stackoverflow.com/a/13569317/476