2016-09-19 169 views
0

是否可以根據主題行讀取電子郵件,然後獲取base64附件或直接獲取附件? 服務器:Linux系統從Linux命令行讀取郵件附件

+2

查看'formail'程序。這個問題可能更適合StackExchange站點[**超級用戶**](http://superuser.com/)或[** ServerFault **](http://serverfault.com/) –

+0

是否有可能只使用命令行而不使用其他實用程序? –

+1

不是我所知道的基於消息和附件的編碼方式,並且包含在同一個文件的不同部分。 (雖然有幾種格式)。你需要一些可以提取和保存附件的內容,以便閱讀它們。 (除非您閱讀7位ASCII碼)您可以將一行實用程序串在一起,以單行方式執行,但最好只使用寫入的實用程序來完成。 –

回答

0

您的問題似乎預設有一個附件,並且它可以可靠地提取。在一般情況下,電子郵件消息可以具有基本上無限量的附件,並且編碼可以是幾個中的一個。

但是,如果我們假設你是在處理與一貫使用靜態消息模板,其中第一的base64附件總是將你想要的,像

case $(formail -zcxSubject: <"$message") in 
    "Hello, here is your report for "*) 
     awk 'BEGIN { h=1 } 
      h { if ($0 ~ /^$/) h=0 ; next } # skip headers 
      /^Content-Disposition: attachment/ { a=1 } # find att 
      a && /^$/ { p=1; next } 
      p && /^$/ { exit } 
      p' "$message" | 
     base64 -d ;; 
esac 

這將提取的東西單個發送者Subject:標題並將其與一個glob模式進行比較。我希望這是「基於主題」的意思 - 如果我們找到匹配的主題標題,請檢查此消息,否則請丟棄。

粗awk腳本嘗試隔離base64數據並將其傳遞到base64 -d進行提取。這包含了一些關於消息格式的令人討厭和粗略的假設,並且可能需要大量額外的調整。簡而言之,我們跳過標題,然後查找標識附件的MIME標題,並打印該標題,跳過消息中的其他所有內容。如果此標題丟失或標識了錯誤的MIME部分,則不會得到結果,或者(更糟糕的是)結果不正確。此外,/^Content-Disposition:/正則表達式在理論上可以在不是MIME頭部的行上匹配,儘管這似乎不太可能(但如果您正在查看退回消息,可能會發生這種情況)。

更健壯的方法將涉及MIME提取工具或可能是一個自定義腳本來實際解析MIME結構並提取您想要的部分。沒有關於你需要什麼的細節,我無法提供。 (這也可以讓你使用發件人的指定文件名;上面的腳本只是將解碼後的有效負載打印到標準輸出中。)

請注意,formail對RFC2047編碼沒有任何意見,所以如果主題不是純ASCII,您必須在腳本中指定編碼形式。

+0

嗨,粗awk腳本試圖隔離base64數據並將其傳遞給base64 -d進行提取。 - 它將如何完成。我能夠提取發件人,主題和附件名稱。我有興趣提取base64數據。 –

+0

我不明白你的問題。你需要關於Awk腳本的更多細節,或者你想要一個具有更多或不同功能的腳本? – tripleee

+0

我想了解如何讀取/ var/spool/mail/user文件,然後根據不同的主題提取附件的詳細信息。 –

0

Gmail提供了IMAP服務,通過該服務,您可以使用任何支持該協議的客戶端來獲取您的電子郵件。該客戶端如何使它們在磁盤上可用可能會有所不同。

到目前爲止,最廣泛使用的命令行IMAP客戶端必須是fetchmail。您可以在Ubuntu中輕鬆安裝它,然後使用谷歌的特定配置與gmail一起使用。

fetchmail的一件事是,它從遠程服務器啜泣電子郵件,然後通過本地MTA管道它們。所以你需要有一個本地配置的MTA來使這個設置工作。 MTA大概會將郵件追加到/ var/mail/$ USER,然後你可以讀取這個文件來處理。

另一個可以工作的工具是offlineimap。我沒有用過;設置可能比使用fetchmail更容易。

至於你需要保存電子郵件中包含的附件​​,你需要的是安裝mpack。然後,在每個電子郵件的.txt文件上運行munpack命令(是的,其中包含附件中的所有亂碼)。它將解碼並將附件保存在單個文件中:

$ munpack mail.txt 
Invoice.PDF (application/pdf) 
my-picture.png (image/png)