用PHP来发邮件,相信大家都不陌生,但读取收件箱的话,接触就少了,这次总结下自己的经验,希望可以帮助大家.
注意:
1.PHP读取收件箱主要是利用imap扩展,所以在使用以下方法前,必须开启imap扩展模块的支持.
2.此方法支持中文,不会乱码,需要保持所有文件的编码的一致性
1.文件结构

2.邮件类 ./mailreceived/receiveMail.html' target='_blank'>class.php
./mailreceived/receiveMail.class.php 文件内容如下:
 ?php // Main ReciveMail Class File - Version 1.0 (03-06-2015)  * File: recivemail.class.php  * Description: Reciving mail With Attechment  * Version: 1.1  * Created: 03-06-2015  * Author: Sara Zhou 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; 
 $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]]. >3.控制层./mailreceived/mailControl.php
 ./mailreceived/mailControl.php 内容如下:
 ?  * File: mailControl.php  * Description: Received Mail Example  * Created: 03-06-2015  * Author: Sara Zhou @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 $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 ? 
4.访问地址:http://localhost/test.cn/mailreceived/mailControl.php 即可
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持php 。
您可能感兴趣的文章:PHP分享图片的生成方法php技巧
laravel 5.4 + vue + vux + element的环境搭配过程介绍php实例
php-fpm添加service服务的例子php实例
以上就是PHP receiveMail实现收邮件功能php实例的详细内容,PHP教程        
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
      
新闻热点
疑难解答