关闭

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

383人阅读 评论(0) 收藏 举报
    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;
    }   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1015788次
    • 积分:21670
    • 等级:
    • 排名:第332名
    • 原创:1081篇
    • 转载:310篇
    • 译文:3篇
    • 评论:77条
    YII2 学习教程
    博客专栏
    Yii2

    文章:7篇

    阅读:9201
    最新评论