当我尝试从PHP发送HTML编码的电子邮件时,如果主题行包含"Here's the information you requested"
之类的特殊字符,则PHP将其编码为"Here's the information you requested."
我该如何解决这个问题?
以下是使用PHP mail()的代码:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: ' . $mod_params['name'] . '<' . $mod_params['email'] . '>' . "\r\n";
$headers .= 'From: <do_not_reply@a4isp.com>' . "\r\n";
$email_to = $mod_params['email'];
$email_sub = "Here's the Information You Requested";
$body = html_entity_decode("<html><body>" . $email_html_body . "</body></html>");
mail($email_to,$email_sub,$body,$headers);
它提供了与通过SugarPHPMailer类运行它相同的错误。
答案 0 :(得分:41)
试试这个:
$newsubject='=?UTF-8?B?'.base64_encode($subject).'?=';
通过这种方式,您不依赖于PHP或MTA的编码,您可以完成工作,邮件客户端应该了解它。您的新主题中不会出现任何特殊字符,因此在发送电子邮件时不会出现任何问题。
答案 1 :(得分:7)
我在一个正在研究的Wordpress插件中遇到了类似的问题,我在这里和其他各种Google搜索结果中尝试了不同的建议。我终于找到了一个适合我情况的解决方案,所以我会分享它。我会说这是保罗的解决方案,我最初尝试过并且没有用,但原因是我试图“简写”解决方案。在我的情况下,只是调用html_entity_decode()不起作用。为什么?如果我更仔细地阅读了PHP文档,那将是显而易见的。我的问题是单引号上的编码,html_entity_decode()的默认值是'ENT_COMPAT',它只留下单引号。解决方案是设置所有参数并且有效。事实上,自从我编写UTF-8以来,我可能已经离开了字符集,但我认为我是彻底的。
$decoded_str = html_entity_decode ( $value_to_decode, ENT_QUOTES, 'UTF-8' );
这里的教训很好,“阅读文档”。我并不是说你没有(你可能已经做过),但我们中的很多人都匆匆忙忙地盯着那些坐在那里的解决方案,如果我们只是看看那就盯着我们。
答案 2 :(得分:6)
如果在发送之前字符串确实不包含编码值,请查看this:
$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n");
// or
$subject= mb_encode_mimeheader($subject,"UTF-7", "Q", "\n");
看看与SugarCRM相关的这些帖子:
答案 3 :(得分:3)
您应该使用mb_encode_mimeheader,只需记住在之前设置。
mb_internal_encoding("UTF-8"); //has to be set (of course your internal encoding may not be UTF-8).
$subject = mb_encode_mimeheader($subject,'UTF-8','Q');
它将在需要时处理(人类可读)Quoted-printable的编码,并根据长度自动将主题分成适当数量的行。
答案 4 :(得分:0)
尝试通过html_entity_decode()运行主题行,看起来可能在主题行中有一些实体。
答案 5 :(得分:-1)
经常提交有问题的代码块会确保您更快地获得更好的响应。在此操作发生之前,您可能会在某处对文本进行编码。如前所述,您可以查找该操作并进行更正,或者您可以在发送电子邮件之前简单地解码主题行。