一个imap的例子 - 参考,代码仅参考,复制后不可用

转载 2013年12月02日 22:14:39
    function getMsg($download_action, $mail_action) 
    {


        if(!$this->msg_uid) {
   $this->buildErrorMsg($this->ERR_STR_MSG_UID_INVALID, imap_last_error());
   return false;
}

$msg_no = imap_msgno($this->stream, $this->msg_uid);

$headers = @imap_header($this->stream, $msg_no);
if(!$headers) {
   $this->buildErrorMsg($this->ERR_STR_MSG_NO_INVALID, imap_last_error());
   return false;
}

$arr["date"] = gmstrftime ("%b %d %Y %H:%M:%S", strtotime($headers->date));
$arr["raw_from"] = $this->decodeHeader($headers->fromaddress);
$arr["raw_cc"] = $this->decodeHeader($headers->ccaddress);
$arr["from"] = $this->makeAddress($headers->from, "$mail_action&msg_uid=$this->msg_uid&mailbox=$this->mailbox");
$arr["cc"] = $this->makeAddress($headers->cc, "$mail_action&msg_uid=$this->msg_uid&mailbox=$this->mailbox");
$arr["subject"] = $this->decodeHeader($headers->subject);
if(empty($arr["subject"])) $arr["subject"] = $this->STR_NO_SUBJECT;

$arr["message_id"] = $headers->message_id;
$arr["references"] = $headers->references;
//from here - need to work out the MIME type etc and produce the download link accordingly.
$struct = @imap_fetchstructure($this->stream, $this->msg_uid, FT_UID);
$arr["struct"]=$struct;
$arr["num_parts"] = count($struct->parts) - 1;
$html = 0;
//this will give a list of all necessary mime type headers to sort out the message & attachments. 
/*echo "<font color=green>type ".$struct->type."\n<br>";
echo "encoding ".$struct->encoding."\n<br>";
echo "subtype ".$struct->subtype."\n<br>";
echo "sub-subtype".$struct->parts[0]->parts[1]->subtype."\n<br>";
echo "parts ".count($struct->parts)."\n<br></font><br>";
echo "id ".$struct->parts[1]->id."\n<br>";
//echo "<br>".imap_body($this->stream,$this->msg_uid,FT_UID);

/*This is the main message body handling area*/
/*********************************************/
if (($struct->parts !=0 && strtolower($struct->disposition) != "attachment") || $struct->bytes!=0) {
if ($struct->type == 1) //multipart message
{
if (strtolower($struct->subtype)=="alternative" || strtolower($struct->subtype)=="mixed")
{
for($i=0; $i< count($struct->parts); $i++) {
$type[$i]=$struct->parts[$i]->subtype;
}
if (strtolower($type[0])=="html")
{
$text=imap_fetchbody($this->stream, $this->msg_uid, "1", FT_UID);
if ($struct->parts[1]->encoding ==3) {
$arr["body"] = imap_base64($text);
$html = 1;
}
else if ($struct->parts[1]->encoding == 4 ) {
$arr["body"] = imap_qprint($text);
$html = 1;
}
else {
$arr["body"] = $text;
$html = 1;
}
}
elseif (strtolower($type[1])=="html")
{
$text=imap_fetchbody($this->stream, $this->msg_uid, "2", FT_UID);
if ($struct->parts[1]->encoding ==3) {
$arr["body"] = imap_base64($text);
$html = 1;
}
else if ($struct->parts[1]->encoding == 4 ) {
$arr["body"] = imap_qprint($text);
$html = 1;
}
else {
$arr["body"] = $text;
$html = 1;
}
}
elseif (strtolower($type[0])=="plain" || strtolower($type[1])=="plain")
{
for ($i=0;$i<count($type);$i++)
{
$text=imap_fetchbody($this->stream, $this->msg_uid, $i+1, FT_UID);
if ($arr["body"]=='' && $text && strtolower($struct->parts[$i]->subtype)=="plain")
{
$arr["body"]=$text;
}
}
}
elseif (strtolower($type[0])=="rfc822" || strtolower($type[1])=="rfc822" || strtolower($type[2])=="rfc822")
{
for ($i=1;$i<count($type);$i++)
{
if (strtolower($type[0])=="alternative")
{
for($z=0;$z< count($struct->parts);$z++)
{
if ($struct->parts[$z+1]->ifdescription)
{
$arr["parts"][$z]=$this->build_url("$download_action&mailbox=$this->mailbox&msg_uid=$this->msg_uid&part_no=".($z+1)."&filename=".$struct->parts[$z+1]->description."", $struct->parts[$z+1]->description);
}
}
}
}
}
}
if (strtolower($struct->parts[0]->subtype)=="alternative")
{
for($i=0; $i< count($struct->parts); $i++) {
$type[$i]=$struct->parts[$i]->parts[1]->subtype;
}
if (strtolower($type[0])=="html")
{
$text=imap_fetchbody($this->stream, $this->msg_uid, "1.2", FT_UID);
if ($struct->parts[0]->parts[1]->encoding ==3) {
$arr["body"] = imap_base64($text);
$arr["body"];
$html = 1;
}
else if ($struct->parts[0]->parts[1]->encoding == 4 ) {
$arr["body"] = imap_qprint($text);
$html = 1;
}
else {
$arr["body"] = $text;
$html = 1;
}
}
elseif (strtolower($type[1])=="html")
{
$text=imap_fetchbody($this->stream, $this->msg_uid, "1", FT_UID);
if ($struct->parts[0]->parts[1]->encoding ==3) {
$arr["body"] = imap_base64($text);
$html = 1;
}
else if ($struct->parts[0]->parts[1]->encoding == 4 ) {
$arr["body"] = imap_qprint($text);
$html = 1;
}
else {
$arr["body"] = $text;
$html = 1;
}
}
for($z=1; $z< count($struct->parts); $z++) {
$id=substr($struct->parts[$z]->id,1,-1);
foreach($struct->parts[$z]->parameters as $attr)
if(strtolower($attrib->attribute) == 'name') {
$filenam = $this->decodeHeader($attrib->value);
break;
}
$arr["body"]=str_replace("src=\"cid:".$id."\"","src=\"http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/viewimage.php?uid=".$this->msg_uid."&part=$z&filename=$filenam&host=$_SESSION[host]&protocol=$_SESSION[protocol]&port=$_SESSION[port]&userid=$_SESSION[userid]&userpassword=$_SESSION[userpassword]\"",$arr["body"]);
}
}
}
else {
if($struct->parts[0]->encoding == 3) {
    $arr["body"] = imap_base64(imap_fetchbody($this->stream, $this->msg_uid, 1, FT_UID));
    if(strtolower($struct->parts[0]->subtype) == 'html') $html = 1;
} else if($struct->parts[0]->encoding == 4) {
    $arr["body"] = imap_qprint(imap_fetchbody($this->stream, $this->msg_uid, 1, FT_UID));
    if(strtolower($struct->parts[0]->subtype) == 'html') $html = 1;
} else {
    if($struct->encoding == 3) {
    $arr["body"] = imap_base64(imap_fetchbody($this->stream, $this->msg_uid, 1, FT_UID));
    if(strtolower($struct->subtype) == 'html') $html = 1;
} else if($struct->encoding == 4) {
    $arr["body"] = imap_qprint(imap_fetchbody($this->stream, $this->msg_uid, 1, FT_UID));
    if(strtolower($struct->subtype) == 'html') $html = 1;
} else { 
    $arr["body"] = imap_fetchbody($this->stream, $this->msg_uid, 1, FT_UID);
    if(strtolower($struct->subtype) == 'html') $html = 1;
}
}
}
}
//this next line is the test line to print all the body text as one text document
//$arr["body"]=imap_body($this->stream,$this->msg_uid,FT_UID);
//remove the above line in reality
if(!$html) {
            $arr["body"] = str_replace("\r\n", "<BR>", $arr["body"]);
   $arr["body"] = eregi_replace( "http://([-a-z0-9\_\./~@?=%(&amp;)|]+)", "<A HREF=\"http://\\1\">http://\\1</A>", $arr["body"]);
   $arr["body"] = eregi_replace( "ftp://([-a-z0-9\_\./~@?=%&amp;]+)", "<A HREF=\"ftp://\\1\">ftp://\\1</A>", $arr["body"]);
   $arr["body"] = eregi_replace( "([-a-z0-9\_\.]+)@([-a-z0-9\_\.]+)", "<A HREF=\"$PHP_SELF?$mail_action&email=\\1@\\2\">\\1@\\2</A>", $arr["body"]);
}
    $arr["body"] = preg_replace('/<style[^>]*>.*<\/style>/Usi', '', $arr["body"]);
$arr["body"] = preg_replace('/<script[^>]*>.*<\/script>/Usi', '', $arr["body"]);
$arr["body"] = preg_replace('/<embed[^>]*>.*<\/embed>/Usi', '', $arr["body"]);
$arr["body"] = preg_replace('/<iframe[^>]*>.*<\/iframe>/Usi', '', $arr["body"]);
$arr["body"] = preg_replace('/<meta[^>]*>/Usi', '', $arr["body"]);
$arr["body"] = preg_replace('/<object[^>]*>.*<\/object>/Usi', '', $arr["body"]);
/*End of the message body handling area*/
/***************************************/

/*This is the start of all attachment handling in the main message */
/******************************************************************/
if ($struct->ifdparameters)
{
for($i=0; $i< count($struct->dparameters); $i++) {
if (strtolower($struct->dparameters[$i]->attribute) == "filename"){
$filename= $this->decodeHeader($struct->dparameters[$i]->value);
$arr["parts"][$i] = $this->build_url("$download_action&mailbox=$this->mailbox&msg_uid=$this->msg_uid&part_no=$i&filename=$filename", $filename);
}
}
}
$num=count($struct->parts);
for($i=0; $i< $num; $i++) {
if (strtolower($struct->parts[$i]->disposition)=="attachment" )//|| strtolower($struct->parts[$i]->disposition)=="rfc822")
{
for($z=0; $z< count($struct->parts[$i]->dparameters); $z++) {
if (strtolower($struct->parts[$i]->dparameters[$z]->attribute) == "filename"){
$filename= $this->decodeHeader($struct->parts[$i]->dparameters[$z]->value);
$arr["parts"][$i] = $this->build_url("$download_action&mailbox=$this->mailbox&msg_uid=$this->msg_uid&part_no=$i&filename=$filename", $filename);
}
}
}
else
{
foreach($struct->parts[$i]->parameters as $attr)
if(strtolower($attr->attribute) == 'name') {
$filename = $this->decodeHeader($attr->value);
break;
}
if ($filename){
            $arr["parts"][$i] = $this->build_url("$download_action&mailbox=$this->mailbox&msg_uid=$this->msg_uid&part_no=$i&filename=$filename", $filename);
        }
    }
}
/*The attachment handling stops here*/
/************************************/
return $arr;
    }   

相关文章推荐

验证码识别参考,qq验证码识别的一个源代码,现在已不可用,但是可以作为参考

老早的一个QQ验证码识别代码了,现在已经不可用,但是里面的方法值得大家学习和参考 目前并不可用,但是可用作为参考 using System; namespace QQ { /// ...

IMAP命令参考

转自:http://hi.baidu.com/rubylang/blog/item/9bf168dfe02a9d154954039f.html 前几天要做关于IMAP协议方面的东西,对IMAP协...

FIFO队列实现----链表实现(2014.8.5 仅代码,参考相关笔记)

FIFO队列的链表实现相对于循环数组实现是
  • jw903
  • jw903
  • 2014-04-10 23:06
  • 922

经常会遇见java.lang.NullPointerExcetion 的错误,典型的一个错误例子,供大家参考

在练习泛型的时候碰到的一个小问题package com.action;import java.util.ArrayList; import java.util.List;public class Fa...

上周末没事写了一个UDP的例子 大家感兴趣的可以参考一下

一直以来大家都是用TCP/IP通信的  或者是用端口进行通信的,上周末没事写了一个UDP 相当于局域网广播通信。 废话少说直接贴代码 ,可以传输英文  中文一直没有调通  不知道啥情况   环境:qt...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)