首页 > 编程 > PHP > 正文

PHP receiveMail实现收邮件功能php实例

2020-03-22 18:02:53
字体:
来源:转载
供稿:网友
这篇文章主要为大家详细介绍了PHP receiveMail实现收邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

用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教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表