PHP 讀取自己的 mbox 信箱內容(Mime Mail Reader)

自己的信箱通常在 ~/mbox 或 /var/spool/mail/Account, 這檔案都是一個文字檔, 但是打開後, 卻都看到一堆亂碼.

那一堆亂碼是 base64 編碼過的結果, 讀取的程式如下: (註: 直接抓下來執行即可, 此內容為 Big5 編碼, 內容如最下面的註解)

臨時需要抓取信件內容來做些事情, 所以就找找有沒有人已經寫好的程式拿來用, 於是找到:

這個 MIME Parser 的 Class 可以把信件內容拆解的很完整, 所以下面再改寫一份程式(參考 test_message_decoder.php 改寫如下):

懶得看程式的, 只要看此程式裡面的 $decoded[$message], $results 這兩個變數的結果, 就可以抓到想要的資料了. (此程式還需要 include 兩個檔案, 完整程式可於此下載: mime_reader.tar.gz)

$decoded 的 資訊(這裡面的內容都還是 Array, 需要另外印出來抓取自己要的值)

  • $decoded[$message]['Headers']
  • $decoded[$message]['Body']
  • $decoded[$message]['ExtractedAddresses']

$results 的 資訊

  • $results['Type']
  • $result['Description']
  • $result['Encoding']
  • $result['Subject']
  • $result['Date']
  • $result['From'][0]['address']
  • $result['To'][0]['address']
  • $result['Return-path'][0]['address']
  • $result['Data']

抓取 Mail 常用的資訊

  • From: $decoded[$message]['Headers']['from:'] 同 $result['From'][0]['address']
  • To: $decoded[$message]['Headers']['to'] 同 $result['To'][0]['address']
  • Date: $decoded[$message]['Headers']['date:'] 同 $result['Date']
  • Subject: $decoded[$message]['Headers']['subject:'] 同 $result['Subject']
  • Body: $decoded['Body'] 同 $result['Data']
  • Content-Type: $decoded[$message]['Headers']['content-type:'] 同 $result['Type'] + $result['Encoding']

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 Programming。將永久鏈結加入書籤。

PHP 讀取自己的 mbox 信箱內容(Mime Mail Reader) 有 24 則回應

  1. 日落 說道:

    抱歉打擾
    PHP有辦法像 Outlook 一樣
    把圖片鑲進 e-mail 中嗎?

  2. Tsung 說道:

    Pear 有 Mail_Mime(http://pear.php.net/package/Mail_Mime), 和 PHPMailer 都可以夾檔寄信, 可以試試看唷 🙂

  3. Tsung 說道:

    您可以參考 http://www.phpclasses.org/browse/package/2964.html 這個看看, 我也還沒用過. 🙂

  4. 藍天綠地 說道:

    請問這個PHP是放在信箱伺服器的根目錄嗎?

  5. Tsung 說道:

    放在哪邊都可以, 主要是 $message_file 指定正確位置即可.

  6. 藍天綠地 說道:

    請問一下, 您使用的這個路徑(~/mbox 或 /var/spool/mail/Account), 是哪一套的MAIL SERVER, 我網友說他目前用的那套找不到存放信件的資料夾

  7. sa074463 說道:

    不好意思想跟你請教個問題,如果我要取得mail的文章內容,是要透過$results['Data']這個鍵值嗎?因為我有試著取得資訊,但是echo $results['Data'] 出來是空的...我是哪裡弄錯了呢??
    另外想問一下,如果想要把收到的信件裡的附加檔案給取出來(例如存到本機硬碟或者DataBase),應該要怎麼做呢?

    謝謝您^^

  8. sa074463 說道:

    阿...可能是因為我利用的是Gmail作為我的媒介...
    所以是空的大概是這個原因....

  9. Patrick Li 說道:

    請問PHP可否做一個程式parse eml files因應subject keywords,然之後轉換到PDF format用來存檔呢~

  10. Patrick Li 說道:

    Thanks Tsung,

    咁可否read eml file and display on the web page and preview to, from, subject and body just like thunderbird client program, 之後end-user在browser之間揀選email然後儲存,謝謝~

  11. Patrick Li 說道:

    明白的,其實我想找freelancer幫我做這個專案small project,詳細資料可電郵聯絡的~

  12. Patrick Li 說道:

    你的blog好像看不見你的電郵,請問那裡找呢~

  13. Patrick Li 說道:

    見到了,今日內(evening) send給你

  14. Patrick Li 說道:

    噢,英文可以嗎

  15. Patrick Li 說道:

    Sorry 遲了,資料已經送出到你電郵,如有問題,可經電郵聯絡

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料