仅在Outlook中发送有关主题字符问题的Php电子邮件

时间:2011-09-22 16:13:11

标签: php character-encoding

我使用php发送邮件,邮件的主题有重音符。

我在Outlook中收到奇怪的字符而不是重音字符。如果我在网络电子邮件客户端看到电子邮件,我会看到主题完美。

这是我用来发送电子邮件的代码:

$to  = 'whateveremail@whatever.com';

$subject = '[WEBSITE] áccent – tésts';

$message = '<p>Test message</p>

$headers = 'MIME-Version: 1.0' . "\r\n";                                          

$headers.= 'From:equipothermomix@thermomix.com' . "\r\n";                                   

$headers.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

mail($to, $subject, $message , $headers);

我如何解决这个问题,我是否必须使用另一个字符集?

2 个答案:

答案 0 :(得分:1)

发送电子邮件的唯一可靠方法是使用普通的7位ASCII,因此当您想要使用其他任何东西时,您需要正确编码字符串。在您的情况下,[WEBSITE] áccent – tésts应编码为(例如)=?windows-1252?B?W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz?=,其中字符串分为:

=?windows-1252?B?W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz?=
  ^            ^ ^
  |            | |
 Charset       | Data
               |
              Base64

检查:

echo base64_decode('W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz'); // [WEBSITE] áccent – tésts

这只是编码非ASCII字符串的一种可能方法的示例。

发送电子邮件时,有许多这样的小细节需要注意。这就是为什么你迟早会使用Swift MailerPHPMailer等适当的电子邮件包。

答案 1 :(得分:1)

如果混合使用编码类型,则会销毁特殊字符。

PHP messing with HTML Charset Encoding

PHP还有一个编码消息的选项。

mb_language('uni'); // mail() encoding

PHP - 多字节字符串