天天看點

php接收郵件類

receivemail是一個專門用來接收郵件的php類,支援pop3和imap等郵件協定。可以接收郵件及郵件附件。

中文亂碼解決

php接收郵件類

/** 

 * decode the subject of chinese 

 * 

 * @param string $subject 

 * @return sting 

 */  

public function subjectdecode($subject) {  

    $beginstr = substr($subject, 0, 5);  

    if($beginstr == '=?iso') {  

        $separator = '=?iso-2022-jp';  

        $toencoding = 'iso-2022-jp';  

    } else  {  

        $separator = '=?gb2312';  

        $toencoding = 'gb2312';  

    }  

    $encode = strstr($subject, $separator);  

    if ($encode) {  

        $explodearr = explode($separator, $subject);  

        $length = count($explodearr);  

        $subjectarr = array();  

        for($i = 0; $i < $length / 2; $i++) {  

            $subjectarr[$i][] = $explodearr[$i * 2];  

            if (@$explodearr[$i * 2 + 1]) {  

                $subjectarr[$i][] = $explodearr[$i * 2 + 1];  

            }  

        }  

        foreach ($subjectarr as $arr) {  

            $subsubject = implode($separator, $arr);  

            if (count($arr) == 1) {  

                $subsubject = $separator . $subsubject;  

            $begin = strpos($subsubject, "=?");  

            $end = strpos($subsubject, "?=");  

            $beginstr = '';  

            $endstr = '';  

            if ($end > 0) {  

                if ($begin > 0) {  

                    $beginstr = substr($subsubject, 0, $begin);  

                }  

                if ((strlen($subsubject) - $end) > 2) {  

                    $endstr = substr($subsubject, $end + 2, strlen($subsubject) - $end - 2);  

                $str = substr($subsubject, 0, $end - strlen($subsubject));  

                $pos = strrpos($str, "?");  

                $str = substr($str, $pos + 1, strlen($str) - $pos);  

                $subsubject = $beginstr . imap_base64($str) . $endstr;  

                $subsubjectarr[] = iconv ( $toencoding, 'utf-8', $subsubject );  

                // mb_convert_encoding($subsubject, 'utf-8' ,'gb2312,iso-2022-jp');  

        $subject = implode('', $subsubjectarr);  

    return $subject;  

}   

if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster')

{ $subject = $this->subjectdecode($mail_header->subject);

使用方法如下:

php接收郵件類

<?php  

include("receivemail.class.php");  

// 建立一個 recivemail 對象  

$obj = new receivemail('[email protected]','*','[email protected]','pop.163.com','pop3','110',false);  

// 連接配接到郵件伺服器  

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

// 讀取全部信件  

$tot = $obj->gettotalmails(); //total mails in inbox return integer value  

echo "收到$tot封郵件::<br>";  

for($i = $tot; $i > 0; $i--)  

{  

    $head = $obj->getheaders($i);  // 讀取擷取郵件頭資訊,傳回數組 **數組鍵值為 (subject,to,tooth,tonameoth,from,fromname)  

    echo "主題 :: ".$head['subject']."<br>";  

    echo "收件人 :: ".$head['to']."<br>";  

    echo "抄送 :: ".$head['tooth']."<br>";  

    echo "發件人 :: ".$head['from']."<br>";  

    echo "發件人名稱 :: ".$head['fromname']."<br>";  

    echo "<br><br>";  

    echo "<br>*******************************************************************************************<br>";  

    echo $obj->getbody($i);  // 郵件正文  

    $str = $obj->getattach($i,"./"); // 擷取郵件附件,傳回的檔案名以逗号隔開。 例如. (mailid, path to store file)  

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

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

        echo ($value == "") ? "" : "atteched file :: " . $value . "<br>";  

    echo "<br>------------------------------------------------------------------------------------------<br>";  

    //$obj->deletemails($i); // delete mail from mail box  

}  

$obj->close_mailbox();   //close mail box  

?>  

 receivemail.class.php需要imap子產品支援。

php接收郵件類

$imap = imap_open("{localhost}mbox-bak","graeme","inferno");  

// get recent messages  

$number = imap_num_recent($imap);  

echo "number of recent messages: $number<br>\n";  

// display subjects of messages  

for ($i=1; $i<=$number; $i++) {  

   $header = imap_header($imap, $i);  

   echo "subject: ", $header->subject, "<br>\n";  

imap_close($imap);  

imap_append :     附加字元串到指定的郵箱中。

imap_base64 :     解 base64 編碼。

imap_body :     讀信的内文。

imap_check :     傳回郵箱資訊。

imap_close :     關閉 imap 連結。

imap_createmailbox :     建立新的信箱。

imap_delete :     标記欲删除郵件。

imap_deletemailbox :     删除既有信箱。

imap_expunge :     删除已标記的郵件。

imap_fetchbody :     從信件内文取出指定部分。

imap_fetchstructure :     擷取某信件的結構資訊。

imap_header :     擷取某信件的标頭資訊。

imap_headers :     擷取全部信件的标頭資訊。 

imap_listmailbox :     擷取郵箱列示。 

imap_listsubscribed :     擷取訂閱郵箱列示。

imap_mail_copy :     複制指定信件到它處郵箱。

imap_mail_move :     移動指定信件到它處郵箱。

imap_num_msg :     取得信件數。

imap_num_recent :     取得新進信件數。 

imap_open :     打開 imap 連結。

imap_ping :     檢查 imap 是否連接配接。

imap_renamemailbox :     更改郵箱名字。

imap_reopen :     重開 imap 連結。

imap_subscribe :     訂閱郵箱。

imap_undelete :     取消删除郵件标記。

imap_unsubscribe :     取消訂閱郵箱。

imap_qprint :     将 qp 編碼轉成八位。

imap_8bit :     将八位轉成 qp 編碼。

imap_binary :     将八位轉成 base64 編碼。

imap_scanmailbox :     尋找信件有無特定字元串。

imap_mailboxmsginfo :     取得目前郵箱的資訊。

imap_rfc822_write_address :     電子郵件位址标準化。

imap_rfc822_parse_adrlist :     解析電子郵件位址。

imap_setflag_full :     配置信件标志。

imap_clearflag_full :     清除信件标志。

imap_sort :     将信件标頭排序。

imap_fetchheader :     取得原始标頭。

imap_uid :     取得信件 uid。

imap_getmailboxes :     取得全部信件詳細資訊。

imap_getsubscribed :     列出所有訂閱郵箱。

imap_msgno :     列出 uid 的連續信件。

imap_search :     搜尋指定标準的信件。

imap_last_error :     最後的錯誤資訊。

imap_errors :     所有的錯誤資訊。

imap_alerts :     所有的警告資訊。

imap_status :     目前的狀态資訊。