Распечатать вложение электронной почты от конкретного отправителя автоматически
Я хотел бы отфильтровать свои входящие электронные письма в Thunderbird таким образом, чтобы вложение (счет в виде файла PDF) печаталось автоматически без дополнительного подтверждения или всплывающих окон.
Тело электронной почты не должно быть напечатано, только прикрепленный файл PDF.
Есть ли способ добиться этого?
Я пытался использовать FilterQuilla, но теперь я могу распечатать только письмо, а не вложение.
Здесь есть вопрос, связанный с правами суперпользователя, однако он требует пакетной печати всех вложений выбранных вручную сообщений (и не имеет ответов). Я хочу специально распечатать вложение всех входящих писем с одного адреса электронной почты отправителя.
0 ответов
Вот мое решение проблемы, объединяющее некоторые аспекты других ответов и преодоление их ограничений.
Преимущества этого решения:
- Решение с открытым исходным кодом, таким образом, также доступно для коммерческих фонов
- Действительно невидимая, тихая печать. Окна не появляются
Подход объединяет несколько этапов:
- Фильтрация писем и извлечение вложений с помощью Filtaquilla в Thunderbird
- Скрипт python для печати файлов через FoxitReader. Другие инструменты, такие как AdobeReader или Ghostscript, не способны печатать без вывода сообщений - окно для AdobeReader уже давно видно, и даже для Ghostscript окно появляется.
- Запланированное задание для регулярного запуска скрипта Python.
Шаг 1
Все электронные письма фильтруются в Thunderbird с помощью Filtaquilla (доступно для Thunderbird 52.0-60.* С 2019 года). Фильтрация по отправителю и теме письма пока обеспечивает достаточную "безопасность". Электронные письма перемещаются в подпапку IMAP (как архив для последующей проверки, если что-то пошло не так). Filtaquilla извлекает все вложения в указанную папку (C:\invoices
). Извлечение вложений не включено по умолчанию в Filtaquilla - обязательно проверьте настройки Filtaquilla.
Шаг 2
Поместите следующий файл print.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\
Обратите внимание на пропущенные кавычки в поле " Выполнить в", иначе скрипт не запустится. Также важно, чтобы скрипт и извлеченные файлы не находились на сетевом диске!
Вы можете использовать двухэтапное решение, если почтовый сервер использует IMAP:
- Загрузить вложения из новых писем в папку
- Следите за папками на предмет новых поступлений и распечатывайте их
Для первого шага вы можете использовать бесплатный продукт, такой как Mail Attachment Downloader Free Edition, описанный как:
Mail Attachment Downloader безопасно загружает и обрабатывает все ваши вложения электронной почты одновременно на основе ваших предпочтений поиска. Оставьте всю свою почту на своем сервере - это не мешает работе других почтовых программ, которые вы используете сегодня для загрузки почты. Вы можете установить различные фильтры, такие как размер, тип файла, кто он, тема письма, дата и время, чтобы указать, что вы хотите скачать.
Для второго шага и после того, как прикрепленные файлы будут сохранены в указанной папке, вы можете распечатать все из них, используя эту однострочную оболочку PowerShell:
Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10}}
Выше требуется установленный продукт PDF, который поддерживает глагол "Печать", например бесплатный Foxit Reader, где графическое окружение (логин) не требуется.
Этот сценарий PowerShell может быть сохранен в .ps1
файл и планируется запускать периодически в планировщике задач.
Если вы используете Adobe Reader, последняя версия может оставаться открытой после печати. Это можно решить, изменив скрипт на:
Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10;$_} | kill}
Вы можете использовать (довольно маленький) скрипт на python, подобный приведенному ниже, который подключится и получит первое сообщение от указанного вами отправителя и распечатает сообщение в стандартный вывод. Затем с munpack
(пакет mpack
в Debian) вы можете получить вложение и обработать его.
Синтаксический анализ сообщения также может быть выполнен в 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()
- Создайте папку '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
Проблема, о которой я беспокоюсь, заключается в том, что без почтового клиента, как фильтровать спам / нежелательную почту, чтобы вы ее не распечатывали, также немного тревожные вложенные файлы могут вызвать инфекцию, но, возможно, я просто параноик