php IMAP读取QQ邮箱邮件内容

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

猜你喜欢

转载自blog.csdn.net/littlelittlebai/article/details/88743253