Heim > php教程 > php手册 > 一个简单的(也可以说是不完全的)IMAP类和应用。(一)

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

WBOY
Freigeben: 2016-06-21 09:12:57
Original
1175 Leute haben es durchsucht

//by Alpha.Z
//05/21/2000

class myimap
{
        var    $username="";
        var    $userpwd="";
        var    $hostname="";
        var    $port=0;
        var    $connection=0;            //是否连接
        var    $state="DISCONNECTED";        //连接状态
        var    $greeting="";            
        var    $must_update=0;
        var    $inStream=0;

    Function open()
    {
        if ($this->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 '';
            echo '';
        }
        echo "
'.$frm.' '.$sub.' '.$date.' '.$msg_size.'
";
    }
    
    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)).'
Nach dem Login kopieren
';
                    break;
                case ENCOTHER:
                // not sure if this needs decoding at all
                    break;
                default:
            }
        }
    }


};

?>



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage