一个简单的(也可以说是不完全的)IMAP类和应用。(一)-PHP技术-3P代码网
繁体中文
设为首页
加入收藏
当前位置:PHP技术首页 >> PHP基础 >> 一个简单的(也可以说是不完全的)IMAP类和应用。(一)

一个简单的(也可以说是不完全的)IMAP类和应用。(一)

2005-02-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:port==110) $this->inStream=imap_open("{$this->hostname/pop3:110}inbox",$this->username,$this->userpwd); else $this->inStream=imap_open("{$this->hostname/imap:143}inbox",$this->username,$this->user...

port==110)

$this->inStream=imap_open("{$this->hostname/pop3:110}inbox",$this->username,$this->userpwd);

else

$this->inStream=imap_open("{$this->hostname/imap:143}inbox",$this->username,$this->userpwd);

if ($this->inStream)

{

echo "用户:$this->username 的信箱连接成功。

";

return $inStream;

}

else

{

echo "用户:$this->username 的信箱连接失败。

";

return 0;

}

}

Function close()

{

if(imap_close($this->inStream))

{

echo "已经与服务器 $this->hostname 断开连接。";

return 1;

}

else

{

echo "与服务器 $this->hostname 断开连接失败。";

return 0;

}

}

Function CheckMailbox()

{

$mboxinfo=@imap_mailboxmsginfo($this->inStream);

//$mboxinfo=imap_check($this->inStream);

if ($mboxinfo)

if ($mboxinfo->Nmsgs>0)

{

echo "您的收件箱里共有邮件数:".$mboxinfo->Nmsgs."

";

echo "未读邮件数:".$mboxinfo->Unread."

";

//echo "新邮件数:".$mboxinfo->Rescent."

";

echo "总共占用空间:".$mboxinfo->Size."字节

";

echo "最新邮件日期:".$mboxinfo->Date."

";

}

else

{

echo "您的信箱里没有邮件。

";

}

else

{

echo '错误:无法获取收件箱的信息。';

}

echo '

';

$sortby="SORTDATE";

$sort_reverse=1;

$sorted = imap_sort($this->inStream, $sortby, $sort_reverse, SE_UID);

for ($i=1;$iNmsgs;$i++)

{

$msgHeader = @imap_header($this->inStream, imap_msgno($this->inStream, $sorted[$i-1]));

//日期

if (isset($msgHeader->date))

{

$date = $msgHeader->date;

if (ord($date) > 64)

$date = substr($date, 5);

while (strstr(' ', $date))

{

$date = str_replace(' ', ' ', $date);

}

}

if (isset($msgHeader->from[0]))

{

$from = $msgHeader->from[0];

if (isset($from->personal))

{

$frm = trim($from->personal);

}

else

if (isset($from->mailbox) && isset($from->host))

{

$frm = $from->mailbox . '@' . $from->host;

}

else

if (isset($msgHeader->fromaddress))

$frm = trim($h->fromaddress);

}

else

if (isset($msgHeader->fromaddress))

$frm = trim($msgHeader->fromaddress);

if (isset($msgHeader->toaddress))

$to = trim($msgHeader->toaddress);

else

$to = "未知";

if (isset($msgHeader->subject))

$sub = trim($this->decode_mime_string($msgHeader->subject));

if (isset($msgHeader->Size))

$msg_size = ($msgHeader->Size > 1024) ? sprintf("%.0f kb", $msgHeader->Size / 1024) : $msgHeader->Size;

if (strlen($frm) > 50)

$frm = substr($frm, 0, 50) . '...';

if (strlen($sub) > 50)

$sub = substr($sub, 0, 50) . '...';

echo '';

echo ''.$frm.'username.'&pwd='.$this->userpwd.'&msg='.$i.'">'.$sub.''.$date.''.$msg_size.'';

echo '';

}

echo "

";

}

Function decode_mime_string ($string)

{

$pos = strpos($string, '=?');

if (!is_int($pos))

{

return $string;

}

$preceding = substr($string, 0, $pos); // save any preceding text

$search = substr($string, $pos+2, 75); // the mime header spec says this is the longest a single encoded word can be

$d1 = strpos($search, '?');

if (!is_int($d1))

{

return $string;

}

$charset = substr($string, $pos+2, $d1);

$search = substr($search, $d1+1);

$d2 = strpos($search, '?');

if (!is_int($d2))

{

return $string;

}

$encoding = substr($search, 0, $d2);

$search = substr($search, $d2+1);

$end = strpos($search, '?=');

if (!is_int($end))

{

return $string;

}

$encoded_text = substr($search, 0, $end);

$rest = substr($string, (strlen($preceding . $charset . $encoding . $encoded_text)+6));

switch ($encoding)

{

case 'Q':

case 'q':

$encoded_text = str_replace('_', '%20', $encoded_text);

$encoded_text = str_replace('=', '%', $encoded_text);

$decoded = urldecode($encoded_text);

break;

case 'B':

case 'b':

$decoded = urldecode(base64_decode($encoded_text));

break;

default:

$decoded = '=?' . $charset . '?' . $encoding . '?' . $encoded_text . '?=';

break;

}

return $preceding . $decoded . decode_mime_string($rest);

}

Function display_toaddress ($user, $server, $from)

{

return is_int(strpos($from, $this->get_barefrom($user, $server)));

}

Function get_barefrom($user, $server)

{

$barefrom = "$user@$real_server";

return $barefrom;

}

Function get_structure($msg_num)

{

$structure=imap_fetchstructure($this->inStream,$msg_num);

//echo gettype($structure);

return $structure;

}

Function proc_structure($msg_part, $part_no, $msg_num)

{

if ($msg_part->ifdisposition)

{

// See if it has a disposition

// The only thing I know of that this

// would be used for would be an attachment

// Lets check anyway

if ($msg_part->disposition == "ATTACHMENT")

{

// If it is an attachment, then we let people download it

// First see if they sent a filename

$att_name = "unknown";

for ($lcv = 0; $lcv parameters); $lcv++)

{

$param = $msg_part->parameters[$lcv];

if ($param->attribute == "NAME")

{

$att_name = $param->value;

break;

}

}

// You could give a link to download the attachment here....

echo ''.$att_name.'

';

$fp=fopen(".\\$att_name","w+");

fputs($fp,imap_base64(imap_fetchbody($this->inStream,$msg_num,$part_no)));

fclose($fp);

}

else

{

// I guess it is used for something besides attachments????

}

}

else

{

// Not an attachment, lets see what this part is...

switch ($msg_part->type)

{

case TYPETEXT:

$mime_type = "text";

break;

case TYPEMULTIPART:

$mime_type = "multipart";

// Hey, why not use this function to deal with all the parts

// of this multipart part :)

for ($i = 0; $i parts); $i++)

{

if ($part_no != "")

{

$part_no = $part_no.".";

}

for ($i = 0; $i parts); $i++)

{

$this->proc_structure($msg_part->parts[$i], $part_no.($i + 1), $msg_num);

}

}

break;

case TYPEMESSAGE:

$mime_type = "message";

break;

case TYPEAPPLICATION:

$mime_type = "application";

break;

case TYPEAUDIO:

$mime_type = "audio";

break;

case TYPEIMAGE:

$mime_type = "image";

break;

case TYPEVIDEO:

$mime_type = "video";

break;

case TYPEMODEL:

$mime_type = "model";

break;

default:

$mime_type = "unknown";

// hmmm....

}

$full_mime_type = $mime_type."/".$msg_part->subtype;

//echo $full_mime_type.'';

// Decide what you what to do with this part

// If you want to show it, figure out the encoding and echo away

switch ($msg_part->encoding)

{

case ENCBASE64:

// use imap_base64 to decode

$fp=fopen(".\\$att_name","w+");

fputs($fp,imap_base64(imap_fetchbody($this->inStream,$msg_num,$part_no)));

fclose($fp);

break;

case ENCQUOTEDPRINTABLE:

// use imap_qprint to decode

//echo ereg_replace("\n","

",imap_qprint(imap_fetchbody($this->inStream,$msg_num,$part_no)));

echo '

'.imap_qprint(imap_fetchbody($this->inStream,$msg_num,$part_no)).'';

break;

case ENCOTHER:

// not sure if this needs decoding at all

break;

default:

}

}

}

};

?>

责任编辑:admin
相关文章