在国内主流的邮箱发邮件时基本都会用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;