使用PHP邮件功能时,如何在收件人名称中使用特殊字符 [英] How to use special characters in recipients name when using PHP's mail function
问题描述
如何发送格式为 Name< user@example.com>
的电子邮件至:
ŠŒŽœžŸ¥μÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ< user@example.com>
显然,很多这些角色永远不会出现在一个名字,但如果他们这样做,我希望他们不会阻止电子邮件成功发送。
目前,这个失败如Apache的error.log中所述,
忽略无效的收件人收件人地址
'¥μÀÁÂÃÄÅÆÇÈÉÊËËÍÒÒÔÕÙÙÙÛÝÒåõöÙÙÙîððóõöéêëìîððÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
' >
如果可能,我想保留这些特殊字符'
否则,我可以使用某种音译功能来清理名称吗?
使用示例:
<?php
$到= ŠŒŽšœžŸ¥μÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ< CHANGED@gmail.com>;
$ subject =测试主题;
$ body =测试体;
if(mail($ to,$ subject,$ body)){
echo(< p> Message successfully sent!< / p>);
} else {
echo(< p>消息传递失败...< / p>);
}
?>
解决方案
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编码。
最后的邮件头应如下所示:
'pre>来:????= UTF-8 Q = E5 = B0 = 81 = E3 = 83 = 90 = E3 = 83 = BC =<山本@示例.COM>
主题:=?UTF-8?Q?= E3 = 81 = 93 = E3 = 82 = 93 = E3 = 81 = AB = E3 = 81 = A1 = E3 = 81 = AF?=
Mime版本:1.0
呈现为:
To:山本< yamamoto@example.com&
主题:
相关/a/13569317/476\">https://stackoverflow.com/a/13569317/476
How can I send an email formatted as "
Name <user@example.com>
" to:ŠŒŽœžŸ¥µÀÁÃÄÅÆÇÉÊËÍÎÏÐÒÓÕÖØÙÜÝßàáâåæçèéëìíîïðñóôõöøùûýÿ <user@example.com>
Obviously, many of these characters will never show up in a name, but in case they do, I would prefer that they do not prevent an email from being successfully sent.
Currently, this fails as noted in Apache's error.log with
Ignoring invalid 'To:' recipient address '¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ ' Transaction aborted: no recipients specified
If possible, I would like to keep the special characters 'as they are.' Otherwise, can I use some sort of transliteration function to clean-up the name?
Example of usage:
<?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>"); } ?>
解决方案
mb_encode_mimeheader
should do it, just as shown in the example:mb_internal_encoding('UTF-8'); $name = '山本'; $email = 'yamamoto@example.com'; $addr = mb_encode_mimeheader($name, 'UTF-8', 'Q') . " <$email>";
For better compatibility you should set the header
Mime-Version: 1.0
so all mail clients understand you're using MIME encoding.The final email headers should look like this:
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
Renders as:
To: 山本 <yamamoto@example.com> Subject: こんにちは
Related: https://stackoverflow.com/a/13569317/476
这篇关于使用PHP邮件功能时,如何在收件人名称中使用特殊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!