【转】解决mail()函数乱码问题
自己搞好了,参考了一下其他的发邮件的类。希望对大家以后有帮助啦,现在总结一下,有东西大家分享
^_^
问题:用mail()函数发送的,$mailsuccess=mail($to, $subject, $message, $headers);
$subject是邮件标题,$message是内容,$headers是头文件信息
$message内容的乱码,我是通过发送html的形式来指定页面编码来解决的,meta可以设置的,而指定使用html的$header里面Content-type: text/html; charset=UTF-8" . "\r\n";也可以设置,哪个起作用就不知道了
$subject的乱码是经过base64_encode()处理,然后设置一些信息,后解决的,$headers里指定发送者也是这种方法解决的,不过$headers变量不能整个编码,只能对发送者进行编码,否者,大家可以试下是什么结果^_^,下面把例子贴出来,大家一起研究下
对中文进行处理
PHP代码如下:
function Encode($str){//对中文进行编码
$str=base64_encode($str);
$str= "=?"."UTF-8?B?".$str."?=";
return $str;
}
$str=base64_encode($str);
$str= "=?"."UTF-8?B?".$str."?=";
return $str;
}
$to = [email=example@mail.com]example@mail.com[/email]; // to email
$post="中文中文";
$subject = '中文中文;
$userName=Encode($userName);
$post=Encode($post);
$subject=Encode($subject);
$message = <<<eot
<html>
<head>
<title>Active Member</title>
<meta http-equiv="Content-Type" c />
</head>
<body>
<p>中文中文</p>
</body>
</html>
eot;
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";//UTF-8
// Additional headers
$headers .= "To: $userName [email=example@mail.com]example@mail.com[/email]" . "\r\n";
$headers .= "From:$post<[email=apache@inhouse.youtig.com]ex[/email]ample@mail.com>" . "\r\n";//$post是一般的邮箱显示的发送者,英文当然没问题了,中文就必须处理
$headers .= "Cc: [email=example@mail.com]example@mail.com[/email]" . "\r\n";
$headers .= "Bcc:[email=example@mail.com]example@mail.com[/email]". "\r\n";
$mailsuccess=mail($to, $subject, $message, $headers);
$post="中文中文";
$subject = '中文中文;
$userName=Encode($userName);
$post=Encode($post);
$subject=Encode($subject);
$message = <<<eot
<html>
<head>
<title>Active Member</title>
<meta http-equiv="Content-Type" c />
</head>
<body>
<p>中文中文</p>
</body>
</html>
eot;
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";//UTF-8
// Additional headers
$headers .= "To: $userName [email=example@mail.com]example@mail.com[/email]" . "\r\n";
$headers .= "From:$post<[email=apache@inhouse.youtig.com]ex[/email]ample@mail.com>" . "\r\n";//$post是一般的邮箱显示的发送者,英文当然没问题了,中文就必须处理
$headers .= "Cc: [email=example@mail.com]example@mail.com[/email]" . "\r\n";
$headers .= "Bcc:[email=example@mail.com]example@mail.com[/email]". "\r\n";
$mailsuccess=mail($to, $subject, $message, $headers);
辛苦,一个小问题搞了一天,希望明天大家会更加好