IMAP
这里给出一个链接:
163 IMAP与POP3区别
一直都不知道这些协议到底有什么区别…可能现在也不是特别了解,就只是大概知道了一下。感觉那个链接里面还是说的很清晰的。
163邮箱读取
刚开始是尝试了一下163邮箱邮件内容的读取,但是在执行imap_open()
的时候报错了,随后163邮箱收到一封邮件,大概意思就是连接不安全,所以被阻止了。查了一下说是163为了推自己的客户端,所以才有这样的事情。但是163也提供了方法可以解决这个问题…因为我只是想试一下这样的代码能不能执行,所以就没有接着搞了。转去弄qq
。
QQ邮箱读取
还是很简单的,在网上找到了一段代码,直接用就可以。
对了,在安装apt-get install php7.0-imap
的时候一直都没有成功,后来执行了一下apt-get update
之后就可以了。还需要在php.ini
中开一下php_imap
扩展,重启apache
服务就可以使用imap
了。
代码如下:
<?php
$mailServer = 'imap.qq.com'; //IMAP server address
$mailLink="{{$mailServer}:143}INBOX" ; // 143 is the port when not SSL
$mailUser = '[email protected]'; // email address
$mailPass = 'xxx'; // client authorization code
$mbox = imap_open($mailLink,$mailUser,$mailPass); // imap_open
$totalrows = imap_num_msg($mbox); // total num in email box
//for ($i=1;$i<$totalrows;$i++){
$i = 1;
$headers = imap_fetchheader($mbox, $i); //获取信件标头
$headArr = matchMailHead($headers); //匹配信件标头
echo iconv_mime_decode($headArr['subject']); //decode MIME
//$mailBody = imap_fetchbody($mbox, $i, 1); // body
//}
function matchMailHead($str){
$headList = array();
$headArr = array(
'from',
'to',
'date',
'subject'
);
foreach ($headArr as $key){
if(preg_match('/'.$key.':(.*?)[\n\r]/is', $str,$m)){
$match = trim($m[1]);
$headList[$key] = $key=='date'?date('Y-m-d H:i:s',strtotime($match)):$match;
}
}
return $headList;
}
?>
因为只是想测试一下,所以只读了一封邮件的内容。
刚开始读出来的内容看着像乱码,查了一下发现是MIME
,类似这样的形式:=?UTF-8?B?55_l5LmO?=
,UTF-8
就表示是UTF-8
编码,B
就是代码base64
编码。php
提供了解码的函数iconv_mime_decode()
。对…就很方便。
PHP Manual