温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在PHP中使用receiveMail接收邮件

发布时间:2021-02-07 21:35:32 来源:亿速云 阅读:266 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关如何在PHP中使用receiveMail接收邮件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

注意:

1.PHP读取收件箱主要是利用imap扩展,所以在使用以下方法前,必须开启imap扩展模块的支持.

2.此方法支持中文,不会乱码,需要保持所有文件的编码的一致性

1.文件结构

如何在PHP中使用receiveMail接收邮件

2.邮件类 ./mailreceived/receiveMail.class.php

./mailreceived/receiveMail.class.php 文件内容如下:

<?php  class receiveMail  {    var $server='';    var $username='';    var $password='';        var $marubox='';                  var $email='';           function receiveMail($username,$password,$EmailAddress,$mailserver='localhost',$servertype='pop',$port='110',$ssl = false) //Constructure    {      if($servertype=='imap')      {        if($port=='') $port='143';         $strConnect='{'.$mailserver.':'.$port. '}INBOX';       }      else      {        $strConnect='{'.$mailserver.':'.$port. '/pop3'.($ssl ? "/ssl" : "").'}INBOX';       }      $this->server      =  $strConnect;      $this->username     =  $username;      $this->password     =  $password;      $this->email     =  $EmailAddress;    }    function connect() //Connect To the Mail Box    {      $this->marubox=@imap_open($this->server,$this->username,$this->password);            if(!$this->marubox)      {        return false;  //     echo "Error: Connecting to mail server";  //     exit;      }      return true;    }            function getHeaders($mid) // Get Header info    {      if(!$this->marubox)        return false;        $mail_header=imap_header($this->marubox,$mid);      $sender=$mail_header->from[0];      $sender_replyto=$mail_header->reply_to[0];      if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster')      {        $subject=$this->decode_mime($mail_header->subject);          $ccList=array();        foreach ($mail_header->cc as $k => $v)        {          $ccList[]=$v->mailbox.'@'.$v->host;        }        $toList=array();        foreach ($mail_header->to as $k => $v)        {          $toList[]=$v->mailbox.'@'.$v->host;        }        $ccList=implode(",", $ccList);        $toList=implode(",", $toList);        $mail_details=array(            'fromBy'=>strtolower($sender->mailbox).'@'.$sender->host,            'fromName'=>$this->decode_mime($sender->personal),            'ccList'=>$ccList,//strtolower($sender_replyto->mailbox).'@'.$sender_replyto->host,            'toNameOth'=>$this->decode_mime($sender_replyto->personal),            'subject'=>$subject,            'mailDate'=>date("Y-m-d H:i:s",$mail_header->udate),            'udate'=>$mail_header->udate,            'toList'=>$toList//strtolower($mail_header->to[0]->mailbox).'@'.$mail_header->to[0]->host  //         'to'=>strtolower($mail_header->toaddress)          );      }      return $mail_details;    }    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 && $structure->subtype!="PNG") {         return $primary_mime_type[(int) $structure->type] . '/' . $structure->subtype;       }       return "TEXT/PLAIN";     }     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);  //         if ($structure->parameters[0]->value!="utf-8")  //         {  //           return imap_base64($text);  //         }  //         else  //         {  //           return imap_base64($text);  //         }          }          else if($structure->encoding == 4)          {            return iconv('gb2312','utf8',imap_qprint($text));          }          else          {            return iconv('gb2312','utf8',$text);          }        }         if($structure->type == 1) /* multipart */         {           while(list($index, $sub_structure) = each($structure->parts))          {             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;     }     function getTotalMails() //Get Total Number off Unread Email In Mailbox    {      if(!$this->marubox)        return false;    //   return imap_headers($this->marubox);      return imap_num_recent($this->marubox);    }        function GetAttach($mid,$path) // Get Atteced File from Mail    {      if(!$this->marubox)        return false;        $struckture = imap_fetchstructure($this->marubox,$mid);            $files=array();      if($struckture->parts)      {        foreach($struckture->parts as $key => $value)        {          $enc=$struckture->parts[$key]->encoding;                    //取邮件附件          if($struckture->parts[$key]->ifdparameters)          {            //命名附件,转码            $name=$this->decode_mime($struckture->parts[$key]->dparameters[0]->value);                     $extend =explode("." , $name);            $file['extension'] = $extend[count($extend)-1];            $file['pathname'] = $this->setPathName($key, $file['extension']);            $file['title']   = !empty($name) ? htmlspecialchars($name) : str_replace('.' . $file['extension'], '', $name);            $file['size']   = $struckture->parts[$key]->dparameters[1]->value;  //         $file['tmpname']  = $struckture->parts[$key]->dparameters[0]->value;            if(@$struckture->parts[$key]->disposition=="ATTACHMENT")            {              $file['type']   = 1;               }            else            {              $file['type']   = 0;            }                  $files[] = $file;                                  $message = imap_fetchbody($this->marubox,$mid,$key+1);            if ($enc == 0)              $message = imap_8bit($message);            if ($enc == 1)              $message = imap_8bit ($message);            if ($enc == 2)              $message = imap_binary ($message);            if ($enc == 3)//图片              $message = imap_base64 ($message);             if ($enc == 4)              $message = quoted_printable_decode($message);            if ($enc == 5)              $message = $message;            $fp=fopen($path.$file['pathname'],"w");            fwrite($fp,$message);            fclose($fp);                      }          // 处理内容中包含图片的部分          if($struckture->parts[$key]->parts)          {            foreach($struckture->parts[$key]->parts as $keyb => $valueb)            {              $enc=$struckture->parts[$key]->parts[$keyb]->encoding;              if($struckture->parts[$key]->parts[$keyb]->ifdparameters)              {                //命名图片                $name=$this->decode_mime($struckture->parts[$key]->parts[$keyb]->dparameters[0]->value);                $extend =explode("." , $name);                $file['extension'] = $extend[count($extend)-1];                $file['pathname'] = $this->setPathName($key, $file['extension']);                $file['title']   = !empty($name) ? htmlspecialchars($name) : str_replace('.' . $file['extension'], '', $name);                $file['size']   = $struckture->parts[$key]->parts[$keyb]->dparameters[1]->value;  //             $file['tmpname']  = $struckture->parts[$key]->dparameters[0]->value;                $file['type']   = 0;                $files[] = $file;                                $partnro = ($key+1).".".($keyb+1);                                $message = imap_fetchbody($this->marubox,$mid,$partnro);                if ($enc == 0)                    $message = imap_8bit($message);                if ($enc == 1)                    $message = imap_8bit ($message);                if ($enc == 2)                    $message = imap_binary ($message);                if ($enc == 3)                    $message = imap_base64 ($message);                if ($enc == 4)                    $message = quoted_printable_decode($message);                if ($enc == 5)                    $message = $message;                $fp=fopen($path.$file['pathname'],"w");                fwrite($fp,$message);                fclose($fp);              }            }          }                }      }      //move mail to taskMailBox      $this->move_mails($mid, $this->marubox);           return $files;    }        function getBody($mid,&$path,$imageList) // 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 "";      }      //处理图片      $body=$this->embed_images($body,$path,$imageList);      return $body;    }        function embed_images(&$body,&$path,$imageList)    {      // get all img tags      preg_match_all('/<img.*?>/', $body, $matches);      if (!isset($matches[0])) return;            foreach ($matches[0] as $img)      {        // replace image web path with local path        preg_match('/src="(.*?)"/', $img, $m);        if (!isset($m[1])) continue;        $arr = parse_url($m[1]);        if (!isset($arr['scheme']) || !isset($arr['path']))continue;          //     if (!isset($arr['host']) || !isset($arr['path']))continue;        if ($arr['scheme']!="http")        {          $filename=explode("@", $arr['path']);          $body = str_replace($img, '<img alt="" src="'.$path.$imageList[$filename[0]].'"  />', $body);        }      }      return $body;    }        function deleteMails($mid) // Delete That Mail    {      if(!$this->marubox)        return false;            imap_delete($this->marubox,$mid);    }    function close_mailbox() //Close Mail Box    {      if(!$this->marubox)        return false;        imap_close($this->marubox,CL_EXPUNGE);    }        //移动邮件到指定分组    function move_mails($msglist,$mailbox)    {      if(!$this->marubox)        return false;          imap_mail_move($this->marubox, $msglist, $mailbox);    }        function creat_mailbox($mailbox)    {      if(!$this->marubox)        return false;            //imap_renamemailbox($imap_stream, $old_mbox, $new_mbox);      imap_create($this->marubox, $mailbox);    }        /*     * decode_mime()转换邮件标题的字符编码,处理乱码     */    function decode_mime($str){      $str=imap_mime_header_decode($str);      return $str[0]->text;      echo "str";print_r($str);      if ($str[0]->charset!="default")      {echo "==".$str[0]->text;        return iconv($str[0]->charset,'utf8',$str[0]->text);      }      else      {        return $str[0]->text;      }    }        public function setPathName($fileID, $extension)    {      return date('Ym/dHis', time()) . $fileID . mt_rand(0, 10000) . '.' . $extension;    }      }  ?>

3.控制层./mailreceived/mailControl.php

 ./mailreceived/mailControl.php 内容如下:

<?  @header('Content-type: text/html;charset=UTF-8');  error_reporting(0);  ignore_user_abort(); // run script in background  set_time_limit(0); // run script forever  date_default_timezone_set('Asia/Shanghai');  include("receivemail.class.php");  class mailControl  {    //定义系统常量    //用户名    public $mailAccount = "123456@qq.com";    public $mailPasswd = "12345";    public $mailAddress = "123456@qq.com";    public $mailServer = "pop.qq.com";    public $serverType = "pop3";    public $port = "110";    public $now    = 0;    public $savePath = '';    public $webPath  = "../upload/";        public function __construct()    {      $this->now = date("Y-m-d H:i:s",time());            $this->setSavePath();    }        /**     * mail Received()读取收件箱邮件     *     * @param     * @access public     * @return result     */    public function mailReceived()    {      // Creating a object of reciveMail Class      $obj= new receivemail($this->mailAccount,$this->mailPasswd,$this->mailAddress,$this->mailServer,$this->serverType,$this->port,false);             //Connect to the Mail Box      $res=$obj->connect();     //If connection fails give error message and exit      if (!$res)      {        return array("msg"=>"Error: Connecting to mail server");      }      // Get Total Number of Unread Email in mail box      $tot=$obj->getTotalMails(); //Total Mails in Inbox Return integer value      if($tot < 1) { //如果信件数为0,显示信息        return array("msg"=>"No Message for ".$this->mailAccount);      }      else      {        $res=array("msg"=>"Total Mails:: $tot<br>");            for($i=$tot;$i>0;$i--)        {          $head=$obj->getHeaders($i); // Get Header Info Return Array Of Headers **Array Keys are (subject,to,toOth,toNameOth,from,fromName)                //处理邮件附件          $files=$obj->GetAttach($i,$this->savePath); // 获取邮件附件,返回的邮件附件信息数组                    $imageList=array();          foreach($files as $k => $file)          {                  //type=1为附件,0为邮件内容图片            if($file['type'] == 0)            {              $imageList[$file['title']]=$file['pathname'];            }          }          $body = $obj->getBody($i,$this->webPath,$imageList);                    $res['mail'][]=array('head'=>$head,'body'=>$body,"attachList"=>$files);         //       $obj->deleteMails($i); // Delete Mail from Mail box  //       $obj->move_mails($i,"taskMail");        }        $obj->close_mailbox();  //Close Mail Box        return $res;      }    }         /**    * creatBox    *    * @access public    * @return void    */    public function creatBox($boxName)    {      // Creating a object of reciveMail Class      $obj= new receivemail($this->mailAccount,$this->mailPasswd,$this->mailAddress,$this->mailServer,$this->serverType,$this->port,false);      $obj->creat_mailbox($boxName);    }        /**     * Set save path.     *     * @access public     * @return void     */    public function setSavePath()    {      $savePath = "../upload/" . date('Ym/', $this->now);      if(!file_exists($savePath))      {        @mkdir($savePath, 0777, true);        touch($savePath . 'index.html');      }      $this->savePath = dirname($savePath) . '/';    }       }    $obj=new mailControl();    //收取邮件    $res=$obj->mailReceived();    echo "<pre>";print_r($res);        //创建邮箱  // $obj->creatBox("readyBox");  ?>

上述就是小编为大家分享的如何在PHP中使用receiveMail接收邮件了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI