我想在 Thunderbird 中過濾傳入的電子郵件,以便自動列印附件(發票為 pdf 檔案),無需額外確認或彈出視窗。
不應列印電子郵件正文,僅應列印隨附的 pdf 檔案。
有沒有辦法實現附件文件的自動列印?
我嘗試使用過濾奎拉,但這樣我只能列印電子郵件本身,而不能列印附件。
有一個相關問題然而,在超級用戶這裡,要求批量列印手動選擇的訊息的所有附件(並且沒有答案)。我想專門列印來自一個寄件者電子郵件地址的所有傳入電子郵件的附件。
雖然擁有基於 Thunderbird 的解決方案會很好,但這不是必要的。在 Thunderbird 中使用一些過濾器並將電子郵件轉發到另一個電子郵件地址,然後由另一個產品存取該地址是完全可以的。
順便說一句,我更喜歡免費/開源解決方案。
答案1
這是我對這個問題的解決方案,結合了其他答案的某些方面並克服了這些答案的局限性。
此解決方案的優點:
- 開源解決方案,因此也可用於商業背景
- 真的隱形、無聲列印。沒有彈出任何窗口
該方法結合了幾個步驟:
- 過濾電子郵件並擷取附件菲爾塔基拉在雷鳥
- A蟒蛇腳本透過列印文件福昕閱讀器。其他工具(例如 AdobeReader 或 Ghostscript)不支援靜默列印 - AdobeReader 會顯示一個視窗相當長一段時間,甚至對於 Ghostscript,也會彈出一個視窗。
- A計劃任務定期運行 python 腳本。
步驟1
所有電子郵件均在 Thunderbird 中進行過濾菲爾塔基拉(截至 2019 年適用於 Thunderbird 52.0-60.*)。過濾電子郵件寄件者和主題目前提供了足夠的「安全性」。電子郵件被移至 IMAP 子資料夾(作為存檔,以便日後在出現問題時進行檢查)。 Filtaquilla 將所有附件提取到指定資料夾 ( C:\invoices
)。 Filtaquilla 預設不會啟用附件提取 - 請務必檢查 Filtaquilla 的設定。
第2步
放置以下內容列印.pyw在C:\invoices
:
import os
import subprocess
import sys
import glob
import time
foxit = "C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"
script_dir = os.path.dirname(os.path.realpath(__file__))
# get all pdf files
pdf_files = glob.glob(script_dir + "/*.pdf")
# print each pdf and delete it
for pdf_file in pdf_files:
command = []
command.append(foxit)
command.append("/p")
command.append("/h")
command.append(pdf_file)
proc = subprocess.Popen(command, stdout=subprocess.PIPE)
time.sleep(10)
os.remove(pdf_file)
步驟3
原則上,print.pyw 檔案可以使用 Filtaquilla 運行。但是,如果過濾器發現多於一封電子郵件,這可能會導致多次列印提取的 pdf 檔案。
為了克服這個問題,規劃任務(操作:運行程式)會很有幫助,每 10 分鐘左右執行一次。
- 程式/腳本:
"C:\Program Files (x86)\Python36-32\pythonw.exe"
- 論點:
"C:\invoices\print.pyw"
- 跑進:
C:\invoices\
請注意中缺少的引號跑進 字段,否則腳本將無法運行。同樣重要的是,腳本和提取的文件是不位於網路磁碟機上!
答案2
- 建立資料夾“AttachmentsToPrint”,在 FilterQuilla 中檢查
Save Attachments To
並指定該資料夾 - 創建一個等待 60 秒的批次/腳本文件(在我們對其進行操作之前給 FilterQuilla 時間來提取附件),然後列印文件,然後刪除文件
- 在 FilterQuilla 中檢查
Run Program
並指定批次/腳本文件 - 交叉手指
當然存在用於此目的的商業軟體,因此如果購買的話,該請求是非常可能且容易的。開源可能是可能的,但比上述更複雜。以下是一些可能幫助您入門的連結: https://blog.thomashampel.com/blog/tomcat2000.nsf/dx/print-email-attachments-with-a-raspberrypi.htm https://ubuntuforums.org/showthread.php?t=935489
我擔心的問題是沒有郵件客戶端,如何過濾垃圾郵件/垃圾郵件,這樣就不會打印它,也有點擔心提取附件可能會導致感染,但也許我只是偏執
答案3
如果電子郵件伺服器使用 IMAP,您可以使用兩步驟解決方案:
- 將新電子郵件中的附件下載到資料夾中
- 監控資料夾中是否有新郵件並列印它們
第一步,您可以使用免費產品,例如 郵件附件下載器免費版, 被形容為:
郵件附件下載器會根據您的搜尋偏好一次安全地下載和處理您的所有電子郵件附件。將所有郵件保留在您的伺服器上 - 它不會幹擾您今天用來下載郵件的任何其他電子郵件程式。您可以設定各種篩選器,例如大小、檔案類型、檔案來源、電子郵件主題、日期和時間戳,以指定您要下載的內容。
對於第二步,一旦附加檔案儲存在指定資料夾中,您就可以使用此 PowerShell 一行列印所有檔案:
Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10}}
以上需要安裝支援 Print 動詞的 PDF 產品,例如免費的 福昕閱讀器,其中不需要圖形環境(登入)。
此 PowerShell 腳本可以儲存在.ps1
檔案中並排程在任務排程器中定期執行。
如果您使用 Adobe Reader,最新版本在列印後可能會保持開啟。可以透過修改腳本來解決這個問題:
Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10;$_} | kill}
答案4
您可以使用一個(非常小的)Python 腳本,如下所示,它將連接並從您指定的寄件者處獲取第一個訊息,並將該訊息列印到標準輸出。然後,使用munpack
(Debian 中的套件mpack
)您可以取得附件並處理它。
訊息解析也可以完成在Python中,這意味著您不需要mpack
,並且您的解決方案可以移植到更多環境。
查看imaplib了解更多選項,例如完成後刪除訊息,或進行其他類型的搜尋。
import getpass, imaplib
M = imaplib.IMAP4("yourserver")
M.login("user","password")
M.select("INBOX")
typ, data = M.search(None, 'from','your_sender')
num = data[0].split()[0]
typ, data = M.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][1])
M.close()
M.logout()