PHPreceiveMail实现收邮件功能php实例

PHPreceiveMail实现收邮件功能php实例

内容导读

收集整理的这篇技术教程文章主要介绍了PHPreceiveMail实现收邮件功能php实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含12474字,纯文字阅读大概需要18分钟

内容图文

这篇文章主要为大家详细介绍了PHP receiveMail实现收邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

用PHP来发邮件,相信大家都不陌生,但读取收件箱的话,接触就少了,这次总结下自己的经验,希望可以帮助大家.

注意:

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

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

1.文件结构

2.邮件类 ./mailreceived/receiveMail.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;
 }



 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]].'" style="border: none;" />', $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;

 }
 }


/**

* Set path name of the uploaded file to be saved.

*

* @param int
$fileID

* @param string $extension

* @access public

* @return string

*/
 public function setPathName($fileID, $extension)
 {

 return date('Ym/dHis', time()) . $fileID . mt_rand(0, 10000) . '.' . $extension;
 }

} ?>

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>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"); ?>

4.访问地址:http://localhost/test.cn/mailreceived/mailControl.php 即可

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Gxl网。

您可能感兴趣的文章:

PHP分享图片的生成方法php技巧

laravel 5.4 + vue + vux + element的环境搭配过程介绍php实例

php-fpm添加service服务的例子php实例

以上就是PHP receiveMail实现收邮件功能php实例的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHPreceiveMail实现收邮件功能php实例全部内容,希望文章能够帮你解决PHPreceiveMail实现收邮件功能php实例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com