Я хотел бы фильтровать входящие письма в Thunderbird таким образом, чтобы вложение (счет в виде файла PDF) печаталось автоматически без дополнительных подтверждений или всплывающих окон.
Текст письма печатать не следует, только прикрепленный PDF-файл.
Есть ли способ сделать так, чтобы прикреплённые файлы распечатывались автоматически?
Я пробовал использоватьФильтрQuilla, но с помощью этого я могу распечатать только само письмо, а не вложение.
Eстьсвязанный вопросздесь, на суперпользователе, однако, он запрашивает пакетную печать всех вложений вручную выбранных сообщений (и не имеет ответов). Я хочу специально распечатать вложение всех входящих писем с одного адреса электронной почты отправителя.
Хотя было бы неплохо иметь решение на базе Thunderbird, это не является обязательным требованием. Было бы совершенно нормально использовать некоторые фильтры в Thunderbird и пересылать письма на другой адрес электронной почты, к которому затем будет обращаться другой продукт.
Кстати, я бы предпочел бесплатное/открытое решение.
решение1
Вот мое решение проблемы, объединяющее некоторые аспекты других ответов и преодолевающее их ограничения.
Преимущества этого решения:
- Решение с открытым исходным кодом, поэтому также доступно для коммерческих проектов
- Действительноневидимая, бесшумная печать. Окна не всплывают.
Подход объединяет несколько этапов:
- Фильтрация писем и извлечение вложений с помощьюФилтакильяв Тандерберде
- Аскрипт на Pythonдля печати файлов черезFoxit Reader. Другие инструменты, такие как AdobeReader или Ghostscript, не способны выполнять тихую печать — окно AdobeReader отображается довольно долго, и даже для Ghostscript окно всплывает.
- Азапланированная задачадля регулярного запуска скрипта Python.
Шаг 1
Все электронные письма фильтруются в Thunderbird с помощьюФилтакилья(доступно для Thunderbird 52.0-60.* по состоянию на 2019 г.). Фильтрация по отправителю и теме письма обеспечивает достаточную «безопасность» на данный момент. Письма перемещаются в подпапку 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, можно воспользоваться двухэтапным решением:
- Загружать вложения из новых писем в папку
- Следите за появлением новых поступлений в папке и распечатывайте их.
На первом этапе вы можете использовать бесплатный продукт, например Бесплатная версия загрузчика почтовых вложений, описан как:
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}
решение4
Вы можете использовать (довольно небольшой) скрипт python, как тот, что ниже, который подключится и получит первое сообщение от указанного вами отправителя и выведет сообщение на стандартный вывод. Затем, с помощью munpack
(пакета mpack
в Debian) вы можете получить вложение и обработать его.
Также можно выполнить синтаксический анализ сообщения.в питоне, то есть вам не нужно mpack
и ваше решение будет переносимым в большее количество сред.
Проверятьимаплибдля получения дополнительных опций, таких как удаление сообщения после завершения работы или выполнение других типов поиска.
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()