
在国内主流的邮箱发邮件时基本都会用base64_encode去加密,所以我们在写接收邮件功能的时候去判断邮件标题的数据,去相应的转码即可。
我们先会获取邮件的encoding的值,然后相应转码
if($structure->encoding == 0){
$message = imap_qprint($message);
}else if($structure->encoding == 1){
$message = imap_8bit($message);
}else if($structure->encoding == 2){
$message = imap_binary($message);
}else if($structure->encoding == 3){
$message = imap_base64($message);
}else if($structure->encoding == 4){
$message = imap_qprint($message);
}然后在获取邮件标题头信息,来判断是否base64转码和与程序编码一致的转码
例如:
$mail_header=imap_header($this->mailbox,$mid);
echo $mail_header->subject;
可能会获取这样的数据:=?gbk?b?ztlkx9k7upbw0ln6yms=?=
分析问号间隔的每段数据,gbk表示这封邮件的编码,b表示需要需要base64解码,ztlkx9k7upbw0ln6yms=表示需要解码的标题内容;
假如我们程序是UTF-8编码,则转码方法如下:
$title = iconv("gbk","utf-8//IGNORE",base64_decode('ztlkx9k7upbw0ln6yms='));
echo $title;