Postfix

使用 shell 腳本從 Postfix 讀取郵件

  • September 1, 2014

我希望能夠使用 shell 腳本讀取來自 Postfix MTA 的傳入郵件。shell 腳本應該能夠檢索郵件標題、主題、正文、附件等,然後將郵件標記為已讀。消息以 Maildir/ 格式儲存。當在 Postfix 中讀取郵件時,它會從 Maildir/new 文件夾移動到 Maildir/cur 文件夾,這有助於保留作為備份,以防郵件需要重新處理。

我已經對此進行了廣泛的搜尋,但沒有發現任何有用的資訊,還有很多關於如何發送郵件的範例,但對於通過腳本閱讀郵件沒有任何用處。mail/mailx 命令似乎只允許互動式訪問,似乎沒有通過 shell 腳本使用它的選項。這只需要為一個使用者工作,因為我使用一個包羅萬象的配置將所有傳入的郵件擷取到一個郵箱中,以便腳本進行後續處理。

始終可以選擇使用 cronjob 或 incron 輪詢 Maildir/new 文件夾以獲取傳入消息,但我最好使用 Postfix 的郵件管理功能,而不是手動管理 msg 文件。我的腳本將在 Postfix 伺服器本地。

有什麼建議/想法嗎?謝謝。

編輯:也許我應該提到我不是在尋求腳本的幫助。我正在尋找一些命令行工具,它可以訪問 Postfix Maildir/msg 儲存並使用 msgs 讀取/執行操作,並且可以以非互動方式呼叫。換句話說,郵件工具的基本功能,但非互動式。

我發現了以下內容:

http://notes-cs.blogspot.in/2013/04/use-command-line-to-read-linux-local.html

這個人準確地描述了我正在尋找的東西。純粹的天才!抓住本質(下面的一切都來自上面的連結):

將所有電子郵件列印到 STDOUT:

$ echo "type *" | mail

$ echo "type 1" | mail   # print the first email to stdout

$ echo "type 3-5" | mail # print the emails from 3 to 5

檢查郵箱是否為空(即“沒有郵件

$$ username $$" 被發現):

$ echo q | mail 2>&1 | grep "No mail for [username]"

清除郵箱:

$ echo "d *" | mail

$ echo "d 3" | mail     # Delete the 3rd email

將所有電子郵件保存在文本文件中:

$ echo "s * test.txt" | mail

在文件中的範圍之間保存電子郵件:

$ echo "s 3-6 test.txt" | mail # this will save email from #3 to #6 to the file test.txt

從郵箱中讀取一封電子郵件:

$ echo 1 | mail # Read the first mail from mail box:

$ echo 5 | mail # Read the 5th email from mail box: 

$ echo 6 | mail

如果郵箱中沒有第 6 封郵件。它會提示您以下錯誤:

6: Invalid message number

錯誤消息“無效的郵件編號”告訴您郵箱中沒有第 6 封電子郵件。如果第 5 封郵件成功返回。您可以將錯誤消息“無效的消息號”視為郵箱的結尾,就像文件的 EOF 一樣。將此與循環相結合,您可以瀏覽郵箱中的所有電子郵件。

引用自:https://serverfault.com/questions/625487