php receivemail下载,PHP 获取邮箱未读邮件的方法 根据receivemail改编而来,已解决乱码,编码有关问题...

PHP 获取邮箱未读邮件的方法 根据receivemail改编而来,已解决乱码,编码问题

receivemail是老外写的,难免不支持中文,研究了一个下午终于成功解决了这个问题,写出来给大家分享下

/*

* File: example.php

* Description: Received Mail Example

* Created: 01-03-2006

* Author: Mitul Koradia

* Email: mitulkoradia@gmail.com

* Cell : +91 9825273322

*/

function test($strHead){

if(ereg("=\?.{0,}\?[Bb]\?",$strHead)){

$arrHead=split("=\?.{0,}\?[Bb]\?",$strHead);

while(list($key,$value)=each($arrHead)){

if(ereg("\?=",$value)){

$arrTemp=split("\?=",$value);

$arrTemp[0]=base64_decode($arrTemp[0]);

$arrHead[$key]=join("",$arrTemp);

}

}

$strHead=join("",$arrHead);

}

return $strHead;

}

function is_utf8($string) {

// From http://w3.org/International/questions/qa-forms-utf-8.html

return preg_match('%^(?:

[\x09\x0A\x0D\x20-\x7E] # ASCII

| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte

| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs

| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte

| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates

| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3

| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15

| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16

)*$%xs', $string);

}

include("receivemail.class.php");

// Creating a object of reciveMail Class

$obj= new receiveMail('93131408@qq.com','xxx','93131408@qq.com','pop.qq.com','pop3','110',false);

//Connect to the Mail Box

$obj->connect(); //If connection fails give error message and exit

// Get Total Number of Unread Email in mail box

$tot=$obj->getTotalMails(); //Total Mails in Inbox Return integer value

echo "Total Mails:: $tot
";

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)

$s=test($head['subject']);

if(is_utf8($s)=='1'){

echo iconv('UTF-8','gb2312',$s) ;

}else{

echo $s;

}

echo "
";

//echo "Subjects :: ".test($head['subject'])."
";

echo "对方邮箱".$head['from']."
";

$ss=test($head['fromName']);

if(is_utf8($ss)=='1'){

echo iconv('UTF-8','gb2312',$ss) ;

}else{

echo $ss;

}

//echo "FromName :: ".$head['fromName']."
";

echo "
*******************************************************************************************
";

//echo $obj->getBody($i); // Get Body Of Mail number Return String Get Mail id in interger

//$str=$obj->GetAttach($i,"./"); // Get attached File from Mail Return name of file in comma separated string args. (mailid, Path to store file)

//$ar=explode(",",$str);

//foreach($ar as $key=>$value)

//echo ($value=="")?"":"Atteched File :: ".$value."
";

//echo "
------------------------------------------------------
";

//$obj->deleteMails($i); // Delete Mail from Mail box

}

$obj->close_mailbox(); //Close Mail Box

?>

// Main ReciveMail Class File - Version 1.1 (02-06-2009)

/*

* File: recivemail.class.php

* Description: Reciving mail With Attechment

* Version: 1.1

* Created: 01-03-2006

* Modified: 02-06-2009

* Author: Mitul Koradia

* Email: mitulkoradia@gmail.com

* Cell : +91 9825273322

*/

/***************** Changes *********************

*

* 1) Added feature to retrive embedded attachment - Changes provided by. Antti

* 2) Added SSL Supported mailbox.

*

**************************************************/

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)

{

echo "Error: Connecting to mail server";

exit;

}

}

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')

{

$mail_details=array(

'from'=>strtolower($sender->mailbox).'@'.$sender->host,

'fromName'=>$sender->personal,

'toOth'=>strtolower($sender_replyto->mailbox).'@'.$sender_replyto->host,

'toNameOth'=>$sender_replyto->personal,

'subject'=>$mail_header->subject,

'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) {

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

}

else if($structure->encoding == 4)

{

return imap_qprint($text);

}

else

{

return $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;

$headers=imap_headers($this->marubox);

return count($headers);

}

function GetAttach($mid,$path) // Get Atteced File from Mail

{

if(!$this->marubox)

return false;

$struckture = imap_fetchstructure($this->marubox,$mid);

$ar="";

if($struckture->parts)

{

foreach($struckture->parts as $key => $value)

{

$enc=$struckture->parts[$key]->encoding;

if($struckture->parts[$key]->ifdparameters)

{

$name=$struckture->parts[$key]->dparameters[0]->value;

$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.$name,"w");

fwrite($fp,$message);

fclose($fp);

$ar=$ar.$name.",";

}

// Support for embedded attachments starts here

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=$struckture->parts[$key]->parts[$keyb]->dparameters[0]->value;

$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.$name,"w");

fwrite($fp,$message);

fclose($fp);

$ar=$ar.$name.",";

}

}

}

}

}

$ar=substr($ar,0,(strlen($ar)-1));

return $ar;

}

function getBody($mid) // 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 "";

}

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

}

}

?>

目前仅仅支持ansi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值