如何将格式为“Name <user@example.com>
”的电子邮件发送至:
ŠŒŽœžŸ¥µÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ <user@example.com>
显然,许多这些角色永远不会出现在名称中,但如果他们这样做,我宁愿他们也不会阻止电子邮件成功发送。
目前,这种情况失败,如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>");
}
?>
答案 0 :(得分:19)
mb_encode_mimeheader
应该这样做,就像示例中所示:
mb_internal_encoding('UTF-8');
$name = '山本';
$email = 'yamamoto@example.com';
$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?= <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
呈现为:
To: 山本 <yamamoto@example.com>
Subject: こんにちは
答案 1 :(得分:1)
RFC-821(2821)告诉我们,必须对头字段中的所有 8位数据进行编码。 Base64或QuotedPrintable,如你所愿,可以。大多数电子邮件阅读器会自动解码编码的字符串