Распечатать вложение электронной почты от конкретного отправителя автоматически

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

Тело электронной почты не должно быть напечатано, только прикрепленный файл PDF.

Есть ли способ добиться этого?

Я пытался использовать FilterQuilla, но теперь я могу распечатать только письмо, а не вложение.

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

0 ответов

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

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

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

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

  1. Фильтрация писем и извлечение вложений с помощью Filtaquilla в Thunderbird
  2. Скрипт python для печати файлов через FoxitReader. Другие инструменты, такие как AdobeReader или Ghostscript, не способны печатать без вывода сообщений - окно для AdobeReader уже давно видно, и даже для Ghostscript окно появляется.
  3. Запланированное задание для регулярного запуска скрипта 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:

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

Для первого шага вы можете использовать бесплатный продукт, такой как 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()
  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

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

Другие вопросы по тегам