当使用下面的PHP语句发送电子邮件的时候,如果编码和接收邮箱编码不相同,会发现邮件的标题是乱码,而邮件正文却是正确的,如何才能使得邮件标题不是乱码呢?
$subject=stripslashes($the_post[''Title'']);
$headers ="MIME-Version:1.0\r\n";
$headers.="Content-type:text/plain;charset=utf-8\r\n";
$headers.="Content-Transfer-Encoding:8bit\r\n";
$message=stripslashes(strip_tags($the_post[''Content'']));
mail($to,$subject,$message,$headers);
先用函数base64_encode()—使用MIMEbase64对数据进行编码
标题字符串前加编码类型例如:=?UTF-8?B?
标题字符串后加:?=
例如:
$subject="=?UTF-8?B?".base64_encode($subject)."?=";
将上面一句添加到代码之中,这样,发送的中文邮件标题就不是乱码了。
<?php
$to=''junhuibai@gmail.com'';
$subject=iconv('''',''GB2312'',''亲爱的''.$s_user.'',请取回您的密码!'');
$subject="=?GB2312?B?".base64_encode($subject)."?=";
$message=$s_user.'',您好!''.
''您的新密码是:''.$pwd.''''.
''为了保证您用户的安全性,请登录更改您的密码。''.
''此信是由系统发出,系统不接收回信,请勿直接回复!'';
$headers=''From:junhuibai@tom.com''."\r\n".
''Reply-To:junhuibai@tom.com''."\r\n".
''X-Mailer:PHP/''.phpversion();
if(mail($to,$subject,$message,$headers))
echo''ok'';
else
echo''no'';
phpinfo();
?>
参考如下:
很多朋友都使用过JavaMail进行邮件发送,在邮件正文中的乱码容易解决。但邮件主题的乱码无论怎样转码总是显示一堆乱码。到底应该怎么处理呢?
JavaMail中的邮件主题需要进行BASE64编码,格式形如:
=?GB2312?B?xPq1xMPcwuvS0b6t1tjWw6Osx+u+ob/stcfCvKOssqLQ3rjEw9zC66Oh?=
所以,直接使用msg.setSubject("中文主题"),或者msg.setSubject("中文主题".getBytes("8859_1"),"GB2312"))都一样会出现乱码。在设置邮件主题前需要将主题字串的字节编码为BASE64格式,并添加编码头,示例代码如下:
sun.misc.BASE64Encoderenc=newsun.misc.BASE64Encoder();msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");