是否可以根據主題行讀取電子郵件,然後獲取base64附件或直接獲取附件? 服務器:Linux系統從Linux命令行讀取郵件附件
回答
您的問題似乎預設有一個附件,並且它可以可靠地提取。在一般情況下,電子郵件消息可以具有基本上無限量的附件,並且編碼可以是幾個中的一個。
但是,如果我們假設你是在處理與一貫使用靜態消息模板,其中第一的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,您必須在腳本中指定編碼形式。
嗨,粗awk腳本試圖隔離base64數據並將其傳遞給base64 -d進行提取。 - 它將如何完成。我能夠提取發件人,主題和附件名稱。我有興趣提取base64數據。 –
我不明白你的問題。你需要關於Awk腳本的更多細節,或者你想要一個具有更多或不同功能的腳本? – tripleee
我想了解如何讀取/ var/spool/mail/user文件,然後根據不同的主題提取附件的詳細信息。 –
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)
- 1. 讀取命令行參數,從文件
- 2. 從命令行讀取文本文件
- 3. 如何讀取Linux命令行
- 4. 從linux命令行發送電子郵件的不同方式
- 5. 從TCL文件執行linux命令
- 6. linux shell:如何從文件讀取命令參數?
- 7. 用附件和主題行使用unix命令發送郵件
- 8. CloudFoundry容器安裝linux郵件命令
- 9. 從Linux中的Outlook郵件中獲取附件
- 10. 從保存的電子郵件附件中讀取kml文件
- 11. 命令行參數或讀取文件
- 12. ZF2閱讀郵件附件?
- 13. Linux - 從Gmail中讀取電子郵件和運行腳本
- 14. unix命令通過傳遞行號從文件中讀取行
- 15. 從Microsoft Exchange Server讀取電子郵件並下載附件
- 16. 從Symfony命令運行Linux命令
- 17. 讀取命令的輸出或從文件中讀取
- 18. Mercurial命令行客戶端,從文件中讀取命令,選項和參數?
- 19. 寫入從Linux命令行
- 20. 生成從Linux命令行
- 21. 從python運行linux命令
- 22. 從Daemon運行Linux命令
- 23. 如何使用linux命令行發送HTML電子郵件
- 24. 從C#讀取Outlook郵件#
- 25. Linux shell命令讀取文本文件並打開
- 26. 如何使用head linux命令讀取所有文本文件?
- 27. 讀取linux命令的輸出而不使用臨時文件
- 28. Linux shell命令按塊讀取/打印文件塊
- 29. 從作爲命令行爭論傳遞的文件中讀取
- 30. 如何從python3的命令行讀取多個csv文件?
查看'formail'程序。這個問題可能更適合StackExchange站點[**超級用戶**](http://superuser.com/)或[** ServerFault **](http://serverfault.com/) –
是否有可能只使用命令行而不使用其他實用程序? –
不是我所知道的基於消息和附件的編碼方式,並且包含在同一個文件的不同部分。 (雖然有幾種格式)。你需要一些可以提取和保存附件的內容,以便閱讀它們。 (除非您閱讀7位ASCII碼)您可以將一行實用程序串在一起,以單行方式執行,但最好只使用寫入的實用程序來完成。 –