网站首页 文章专栏 php 获取QQ邮箱最新32条邮件

php 获取QQ邮箱最新32条邮件

编辑时间:2019-10-21 17:15:37 作者:苹果 浏览量:3082


    前言:每次去看邮箱里的邮件都要去网页上重新登号产看,嫌麻烦,特意整理了一个获取QQ邮箱的方法



该方法需要安装php    imap 扩展



根据自己的需要,改成自己想要的程序

    public function showemail(){
             error_reporting(0); //屏蔽掉腾讯返回的一些注意事项
   
             @header('Content-type: text/html;charset=UTF-8');
             ignore_user_abort(); 
             set_time_limit(0); 
          
             $fileSavePaht =  '附件存储地址';
       
             $obj = new Receivemail('QQ号', '邮箱密码不是QQ密码', QQ邮箱地址', 'imap.qq.com', 'imap', '993', false);
             $obj->connect();
    
             $tot = $obj->getTotalMails(); //总邮件数量,目前只返回32条数据
    
             for ($i = $tot; $i > 0; $i--) {
                 $data=[];
                 $head = $obj->getHeaders($i);  // 建议打印下这个,自己选择自己需要的
                 $data['title']=iconv_mime_decode($head['subject']); //标题
                 $data['From']=iconv_mime_decode($head['toNameOth']); //发件人
                 $data['FromName']=iconv_mime_decode($head['FromName']);
                 $data['date']=date('Y-m-d H:i:s',($head['udate']));  //时间
    
                 $str = $obj->GetAttach($i, $fileSavePaht); 
                 $ar = explode(",", $str);
                 $attach=[];
                 foreach ($ar as $key => $value)
                     $attach[]=($value == "") ? "" : "Atteched File :: " . $value; 
                 $data['content']=$obj->getBody($i); //内容
                 $data['attach']=$attach;   //附件信息
                 $obj->removeEamil($i); 
                 $arr[]=$data;
             }
             $obj->close_mailbox();   
            return $arr;
         }




附注:

Receivemail类:

<?php    
    
    class Receivemail {
    
        private $server = '';
        private $username = '';
        private $password = '';
        private $marubox = '';
        private $email = '';
     public  function __construct($username, $password, $EmailAddress, $mailserver = 'localhost', $servertype = 'pop', $port = '110', $ssl = false)
        {
    
            if ($servertype == 'imap') {
                if ($port == '')
                    $port = '143';
                $strConnect = '{' . $mailserver . ':' . $port . '/imap/ssl}INBOX';
            }
            else {
                $strConnect = '{' . $mailserver . ':' . $port . '/pop3' . ($ssl ? "/ssl" : "") . '}INBOX';
            }
            $this->server = $strConnect;
            $this->username = $username;
            $this->password = $password;
            $this->email = $EmailAddress;
        }
    
    
      public  function connect() {
            $this->marubox = @imap_open($this->server, $this->username, $this->password);
            if (!$this->marubox) {
                echo "Error: Connecting to mail server";
                exit;
            }
        }
    
        public  function listMessages($page = 1, $per_page = 25, $sort = null) {
            $limit = ($per_page * $page);
            $start = ($limit - $per_page) + 1;
            $start = ($start < 1) ? 1 : $start;
            $limit = (($limit - $start) != ($per_page - 1)) ? ($start + ($per_page - 1)) : $limit;
            $info = imap_check($this->marubox);
            $limit = ($info->Nmsgs < $limit) ? $info->Nmsgs : $limit;
    
            if (true === is_array($sort)) {
                $sorting = array(
                    'direction' => array('asc' => 0, 'desc' => 1),
                    'by' => array('date' => SORTDATE, 'arrival' => SORTARRIVAL,
                        'from' => SORTFROM, 'subject' => SORTSUBJECT, 'size' => SORTSIZE));
                $by = (true === is_int($by = $sorting['by'][$sort[0]])) ? $by : $sorting['by']['date'];
                $direction = (true === is_int($direction = $sorting['direction'][$sort[1]])) ? $direction : $sorting['direction']['desc'];
                $sorted = imap_sort($this->marubox, $by, $direction);
                $msgs = array_chunk($sorted, $per_page);
                $msgs = $msgs[$page - 1];
            } else {
                $msgs = range($start, $limit); //just to keep it consistent
            }
            $result = imap_fetch_overview($this->marubox, implode($msgs, ','), 0);
            if (false === is_array($result))
                return false;
    
            foreach ($result as $k => $r) {
                $result[$k]->subject = $this->_imap_utf8($r->subject);
                $result[$k]->from = $this->_imap_utf8($r->from);
                $result[$k]->to = $this->_imap_utf8($r->to);
                $result[$k]->body = $this->getBody($r->msgno);
            }
            if (true === is_array($sorted)) {
                $tmp_result = array();
                foreach ($result as $r) {
                    $tmp_result[$r->msgno] = $r;
                }
    
                $result = array();
                foreach ($msgs as $msgno) {
                    $result[] = $tmp_result[$msgno];
                }
            }
    
            $return = array('res' => $result,
                'start' => $start,
                'limit' => $limit,
                'sorting' => array('by' => $sort[0], 'direction' => $sort[1]),
                'total' => imap_num_msg($this->marubox));
            $return['pages'] = ceil($return['total'] / $per_page);
            return $return;
        }
    
        public  function getHeaders($mid) {
            if (!$this->marubox)
                return false;
    
            $mail_header = imap_header($this->marubox, $mid);
            $sender = $mail_header->from[0];
            $sender_replyto = $mail_header->reply_to[0];
            $sender_replyto = $mail_header->reply_to[0];
            if (strtolower($sender->mailbox) != 'mailer-daemon' && strtolower($sender->mailbox) != 'postmaster') {
                $mail_details = array(
                    'from' => strtolower($sender->mailbox) . '@' . $sender->host,
                    'fromName' => $sender->personal,
                    'toOth' => strtolower($sender_replyto->mailbox) . '@' . $sender_replyto->host,
                    'toNameOth' => $sender_replyto->personal,
                    'subject' => $mail_header->subject,
                    'to' => strtolower($mail_header->toaddress),
                    'udate' => strtolower($mail_header->udate)
                );
            }
            return $mail_details;
        }
    
        public   function get_mime_type(&$structure) { //Get Mime type Internal Private Use
            $primary_mime_type = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER");
    
            if ($structure->subtype) {
                return $primary_mime_type[(int) $structure->type] . '/' . $structure->subtype;
            }
            return "TEXT/PLAIN";
        }
    
        public   function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false) { //Get Part Of Message Internal Private Use
            if (!$structure) {
                $structure = imap_fetchstructure($stream, $msg_number);
            }
            if ($structure) {
                if ($mime_type == $this->get_mime_type($structure)) {
                    if (!$part_number) {
                        $part_number = "1";
                    }
                    $text = imap_fetchbody($stream, $msg_number, $part_number);
                    if ($structure->encoding == 3) {
                        return imap_base64($text);
                    } else if ($structure->encoding == 4) {
                        return imap_qprint($text);
                    } else {
                        return $text;
                    }
                }
                if ($structure->type == 1) /* multipart */ {
    
                    foreach ($structure->parts as $index =>$sub_structure){
                        $prefix = '';
                        if ($part_number) {
                            $prefix = $part_number . '.';
                        }
                        $data = $this->get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1));
                        if ($data) {
                            return $data;
                        }
                    }
                }
            }
            return false;
        }
    
        public   function getTotalMails() {
            if (!$this->marubox)
                return false;
    
            $headers = imap_headers($this->marubox);
            return count($headers);
        }
    
        public   function GetAttach($mid, $path) { // Get Atteced File from Mail
            if (!$this->marubox) {
                return false;
            }
    
            $struckture = imap_fetchstructure($this->marubox, $mid);
            $ar = "";
            if ($struckture->parts) {
                foreach ($struckture->parts as $key => $value) {
                    $enc = $struckture->parts[$key]->encoding;
                    if ($struckture->parts[$key]->subtype == 'OCTET-STREAM') {
                        $name = base64_decode($struckture->parts[$key]->parameters[1]->value);
                        $name = iconv("gbk", 'utf-8', $name);
                        $name = substr($name, 7); // 未知原因 base64解密以后字符串前边多了三个 乱码字符    截取7以后的字符串
                        $message = imap_fetchbody($this->marubox, $mid, $key + 1);
                        switch ($enc) {
                            case 0:
                                $message = imap_8bit($message);
                                break;
                            case 1:
                                $message = imap_8bit($message);
                                break;
                            case 2:
                                $message = imap_binary($message);
                                break;
                            case 3:
                                $message = imap_base64($message);
                                break;
                            case 4:
                                $message = quoted_printable_decode($message);
                                break;
                            case 5:
                                $message = $message;
                                break;
                        }
    // 文件名转换
                        $name = explode('.', $name);
                        $firs_name = urlencode($name[0]);
                        $filename = $firs_name . '.' . $name[1];
                        $fp = fopen($path . $filename, "w");  //fopen  中文文件名
                        fwrite($fp, $message);
                        fclose($fp);
                        $ar = $ar . $filename . ",";
                    }
    
                }
            }
            $ar = substr($ar, 0, (strlen($ar) - 1));
            return $ar;
        }
    
        public  function removeEamil($mid) {
            if (!$this->marubox)
                return false;
    
            imap_mail_move($this->marubox, $mid, '&UXZO1mWHTvZZOQ-/beifen');
        }
    
        public  function getBody($mid) { // Get Message Body
            if (!$this->marubox) {
                return false;
            }
            $body = $this->get_part($this->marubox, $mid, "TEXT/HTML");
            if ($body == "") {
                $body = $this->get_part($this->marubox, $mid, "TEXT/PLAIN");
            }
            if ($body == "") {
                return "";
            }
            return $this->_iconv_utf8($body);
        }
    
        public  function deleteMails($mid) { // Delete That Mail
            if (!$this->marubox)
                return false;
    
            imap_delete($this->marubox, $mid);
        }
    
        public function close_mailbox() { //Close Mail Box
            if (!$this->marubox)
                return false;
    
            imap_close($this->marubox, CL_EXPUNGE);
        }
    
        public function _imap_utf8($text) {
            if (preg_match('/=\?([a-zA-z0-9\-]+)\?(.*)\?=/i', $text, $match)) {
                $text = imap_utf8($text);
                if (strtolower(substr($match[1], 0, 2)) == 'gb') {
                    $text = iconv('gbk', 'utf-8', $text);
                }
                return $text;
            }
            return $this->_iconv_utf8($text);
        }
    
        public function _iconv_utf8($text) {
               $text=preg_replace('#<!--[^\!\[]*?(?<!\/\/)-->#' , '' , $text);
               @ $s1 = iconv('gbk', 'utf-8', $text);
                $s0 = iconv('utf-8', 'gbk', $s1);
                if ($s0 == $text) {
                    return $s1;
                } else {
                    return $text;
                }
    
    
        }
    
    }



    出自:何冰华个人网站

    地址:https://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论