首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實作 POP3 郵件解碼(三):完整 decode_mail 類別實作與使用說明

     編輯:PHP 綜合知識

類別架構

decode_mail 類別主要方法:

  • decode($head, $body, $content_num = -1):主入口,$head、$body 為字串陣列(各行一元素),$content_num 指定只解析第 N 部分(-1 為全部)。
  • decode_head():解析標頭,提取 From、To、Date、Subject、Content-Type、boundary 等。
  • decode_body():根據標頭資訊解析主體,支援單一與多部分。
  • decode_mult():遞迴解析多部分郵件。
  • decode_mime():上篇介紹的標頭編碼解碼。

核心屬性

var $from_name, $to_name, $mail_time, $from_mail, $to_mail;
var $reply_to, $cc_to, $subject;
var $body = array();        // 解碼後主體陣列,每元素含 type, name, content_id, char_set, size, content
var $body_type, $boundary, $body_code_type, $body_char_set;

解析流程重點

  1. 標頭解析:逐行檢查 =? 呼叫 decode_mime,再以 : 分割欄位名與值,用 switch 處理各欄位。Date 轉為 Unix timestamp;Content-Type 判斷是否 multipart 並提取 boundary/ charset/ encoding。
  2. 單一主體:直接以 implode 合併主體行,依 body_code_type 呼叫 base64_decode 或 quoted_printable_decode。
  3. 多部分主體:呼叫 decode_mult,以 boundary 為分隔遞迴處理。每部分再解析其標頭(Content-Type, Content-Transfer-Encoding, Content-Disposition, name, charset, Content-ID),取得內容後依編碼解碼。
  4. 結果結構:$this->body[$index] 包含 type、name、content_id、char_set、size、content。

使用範例

<?php
require_once 'pop3_class.php';   // 假設已有 POP3 收信類
require_once 'decode_mail.php';  // 本類別

$pop = new POP3('pop.163.com', 110, 'user', 'pass');
$pop->connect();
$mail = $pop->getMail(1); // 取得第 1 封郵件,回傳 [head, body] 陣列

$decoder = new decode_mail();
if ($decoder->decode($mail['head'], $mail['body'])) {
    echo "主旨: " . $decoder->subject . "<br>";
    echo "寄件者: " . $decoder->from_name . " <" . $decoder->from_mail . "><br>";
    echo "時間: " . date('Y-m-d H:i:s', $decoder->mail_time) . "<br>";

    foreach ($decoder->body as $part) {
        echo "<h3>部分: {$part['name']} ({$part['type']})</h3>";
        if (strpos($part['type'], 'text/') === 0) {
            echo "<pre>" . htmlspecialchars($part['content']) . "</pre>";
        } else {
            echo "附件/非文字內容,大小: {$part['size']} bytes<br>";
        }
    }
} else {
    echo "解碼失敗: " . $decoder->err_str;
}
?>

注意事項

  • 類別大量使用正則表達式,需注意效能與邊界情況。
  • PHP 4/5 相容寫法,未使用嚴格封裝,部分暫存變數宣告為 public。
  • 實際部署建議加入圖片 CID 替換、附件儲存、字元集轉換(iconv/mbstring)等功能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved