Шаг 1

Шаг 1

Я хотел бы фильтровать входящие письма в Thunderbird таким образом, чтобы вложение (счет в виде файла PDF) печаталось автоматически без дополнительных подтверждений или всплывающих окон.

Текст письма печатать не следует, только прикрепленный PDF-файл.

Есть ли способ сделать так, чтобы прикреплённые файлы распечатывались автоматически?

Я пробовал использоватьФильтрQuilla, но с помощью этого я могу распечатать только само письмо, а не вложение.

Eстьсвязанный вопросздесь, на суперпользователе, однако, он запрашивает пакетную печать всех вложений вручную выбранных сообщений (и не имеет ответов). Я хочу специально распечатать вложение всех входящих писем с одного адреса электронной почты отправителя.

Хотя было бы неплохо иметь решение на базе Thunderbird, это не является обязательным требованием. Было бы совершенно нормально использовать некоторые фильтры в Thunderbird и пересылать письма на другой адрес электронной почты, к которому затем будет обращаться другой продукт.

Кстати, я бы предпочел бесплатное/открытое решение.

решение1

Вот мое решение проблемы, объединяющее некоторые аспекты других ответов и преодолевающее их ограничения.

Преимущества этого решения:

  • Решение с открытым исходным кодом, поэтому также доступно для коммерческих проектов
  • Действительноневидимая, бесшумная печать. Окна не всплывают.

Подход объединяет несколько этапов:

  1. Фильтрация писем и извлечение вложений с помощьюФилтакильяв Тандерберде
  2. Аскрипт на Pythonдля печати файлов черезFoxit Reader. Другие инструменты, такие как AdobeReader или Ghostscript, не способны выполнять тихую печать — окно AdobeReader отображается довольно долго, и даже для Ghostscript окно всплывает.
  3. Азапланированная задачадля регулярного запуска скрипта 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

  1. Создайте папку «AttachmentsToPrint», в FilterQuilla проверьте Save Attachments Toи укажите эту папку
  2. Создайте пакетный файл/скрипт, который ждет 60 секунд (чтобы дать FilterQuilla время извлечь вложение, прежде чем мы что-то с ним сделаем), затем распечатайте файл, затем удалите файл
  3. В FilterQuilla проверьте Run Programи укажите этот пакетный/скриптовый файл
  4. Скрестите пальцы

Коммерческое ПО, конечно, существует для этого, так что запрос ОЧЕНЬ возможен и прост, если его купить. Открытый исходный код, скорее всего, возможен, но даже сложнее, чем вышеперечисленное. Вот несколько ссылок, с которых можно начать: https://blog.thomashampel.com/blog/tomcat2000.nsf/dx/print-email-attachments-with-a-raspberrypi.htm https://ubuntuforums.org/showthread.php?t=935489

Проблема, о которой я беспокоюсь, заключается в том, как без почтового клиента отфильтровывать спам/нежелательную почту, чтобы не распечатывать ее, а также немного беспокоит то, что извлекаемые вложения могут стать причиной заражения, но, возможно, я просто параноик.

решение3

Если почтовый сервер использует протокол IMAP, можно воспользоваться двухэтапным решением:

  1. Загружать вложения из новых писем в папку
  2. Следите за появлением новых поступлений в папке и распечатывайте их.

На первом этапе вы можете использовать бесплатный продукт, например Бесплатная версия загрузчика почтовых вложений, описан как:

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()

Связанный контент