用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教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答