追加の確認やポップアップなしで添付ファイル (PDF ファイルの請求書) が自動的に印刷されるように、Thunderbird で受信メールをフィルタリングしたいと思います。
電子メールの本文は印刷せず、添付の PDF ファイルのみを印刷してください。
添付ファイルを自動印刷する方法はありますか?
使ってみたフィルターキラしかし、これだとメール自体しか印刷できず、添付ファイルは印刷できません。
そこには関連する質問ただし、ここではスーパーユーザーですが、手動で選択したメッセージのすべての添付ファイルを一括/バッチ印刷するように要求しています (回答はありません)。私は、1 つの送信者メール アドレスからのすべての受信メールの添付ファイルを具体的に印刷したいと考えています。
Thunderbird ベースのソリューションがあれば便利ですが、これは必須ではありません。Thunderbird でいくつかのフィルターを使用して、電子メールを別の電子メール アドレスに転送し、別の製品でアクセスすることはまったく問題ありません。
ちなみに、私は無料/オープンソースのソリューションを好みます。
答え1
これは、他の回答のいくつかの側面を組み合わせ、それらの制限を克服した、問題に対する私の解決策です。
このソリューションの利点:
- オープンソースソリューションなので、商用背景でも利用可能
- 本当に目に見えない静かな印刷ウィンドウがポップアップしない
このアプローチは、いくつかのステップを組み合わせたものです。
- メールのフィルタリングと添付ファイルの抽出フィルタキヤサンダーバード
- あPython スクリプトファイルを印刷するにはフォックスイットリーダーAdobeReader や Ghostscript などの他のツールでは、サイレント印刷ができません。AdobeReader の場合はウィンドウがかなり長い間表示されますが、Ghostscript の場合でもウィンドウがポップアップ表示されます。
- あスケジュールされたタスク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 を使用している場合は、2 段階のソリューションを使用できます。
- 新しいメールの添付ファイルをフォルダーにダウンロードする
- 新着メールをフォルダーで監視し、印刷する
最初のステップとしては、次のような無料製品を使うことができます。 メール添付ファイルダウンローダー無料版、 記述:
Mail Attachment Downloader は、検索設定に基づいて、すべての電子メール添付ファイルを一度に安全にダウンロードして処理します。すべてのメールをサーバー上に残します。メールをダウンロードするために現在使用している他の電子メール プログラムに干渉することはありません。サイズ、ファイルの種類、送信者、電子メールの件名、日付とタイムスタンプなどのさまざまなフィルターを設定して、ダウンロードする内容を指定できます。
2 番目のステップでは、添付ファイルが指定されたフォルダーに保存されたら、次の PowerShell ワンライナーを使用してすべてのファイルを印刷できます。
Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10}}
上記には、印刷動詞をサポートする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()