Paso 1

Paso 1

Me gustaría filtrar mis correos electrónicos entrantes en Thunderbird de manera que el archivo adjunto (factura como archivo pdf) se imprima automáticamente sin confirmación adicional ni ventanas emergentes.

No se debe imprimir el cuerpo del correo electrónico, sólo el archivo pdf adjunto.

¿Hay alguna forma de lograr la impresión automática de los archivos adjuntos?

Intenté usarFiltroQuilla, pero con esto sólo puedo imprimir el correo electrónico en sí, no el archivo adjunto.

Hay unpregunta relacionadaaquí en superusuario, sin embargo, se solicita la impresión masiva/por lotes de todos los archivos adjuntos de los mensajes seleccionados manualmente (y no tiene respuestas). Quiero imprimir específicamente el archivo adjunto de todos los correos electrónicos entrantes de una dirección de correo electrónico del remitente.

Si bien sería bueno tener una solución basada en Thunderbird, esto no es un requisito. Estaría totalmente bien usar algunos filtros en Thunderbird y reenviar correos electrónicos a otra dirección de correo electrónico, a la que luego accede otro producto.

Por cierto, preferiría una solución gratuita/de código abierto.

Respuesta1

Aquí está mi solución al problema, combinando algunos aspectos de las otras respuestas y superando sus limitaciones.

Ventajas de esta solución:

  • Solución de código abierto, por lo que también está disponible para entornos comerciales.
  • En realidadimpresión invisible y silenciosa. No aparece ninguna ventana

El enfoque combina varios pasos:

  1. Filtrado de correos electrónicos y extracción de archivos adjuntos conFiltaquillaen Thunderbird
  2. Asecuencia de comandos de Pythonpara imprimir los archivos a travésFoxitReader. Otras herramientas, como AdobeReader o Ghostscript, no son capaces de realizar una impresión silenciosa: una ventana está visible para AdobeReader durante bastante tiempo e incluso para Ghostscript, aparece una ventana.
  3. Atarea programadapara ejecutar el script de Python de forma regular.

Paso 1

Todos los correos electrónicos se filtran en Thunderbird conFiltaquilla(disponible para Thunderbird 52.0-60.* a partir de 2019). El filtrado por remitente y asunto del correo electrónico proporciona suficiente "seguridad" por ahora. Los correos electrónicos se mueven a una subcarpeta IMAP (como un archivo para inspección posterior si algo salió mal). Filtaquilla extrae todos los archivos adjuntos a una carpeta específica ( C:\invoices). La extracción de archivos adjuntos no está habilitada de forma predeterminada en Filtaquilla; asegúrese de verificar la configuración de Filtaquilla.

Paso 2

Coloca lo siguienteimprimir.pywen 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)

Paso 3

En principio, el archivo print.pyw se puede ejecutar con Filtaquilla. Sin embargo, esto puede provocar la impresión múltiple de archivos PDF extraídos si el filtro encuentra más de un correo electrónico.

Para superar esto, es útil una tarea programada (acción: ejecutar programa), que se ejecuta aproximadamente cada 10 minutos.

  • programa/guion:"C:\Program Files (x86)\Python36-32\pythonw.exe"
  • argumentos:"C:\invoices\print.pyw"
  • entrar corriendo:C:\invoices\

Tenga en cuenta las citas que faltan en elentrar corriendo de lo contrario el script no se ejecutará. También es importante que el script y los archivos extraídos seanno ubicado en una unidad de red!

Respuesta2

  1. Cree la carpeta 'AttachmentsToPrint', en FilterQuilla verifique Save Attachments Toy especifique esa carpeta
  2. Cree un archivo por lotes/script que espere 60 segundos (para darle tiempo a FilterQuilla para extraer el archivo adjunto antes de que hagamos algo con él), luego imprima el archivo y luego elimine el archivo.
  3. En FilterQuilla verifique Run Programy especifique ese archivo por lotes/script
  4. Cruza tus dedos

Ciertamente existe software comercial para esto, por lo que la solicitud es MUY posible y fácil si se compra. Es probable que el código abierto sea posible, pero incluso más complicado que lo anterior. Aquí hay algunos enlaces que posiblemente le ayudarán a comenzar: https://blog.thomashampel.com/blog/tomcat2000.nsf/dx/print-email-attachments-with-a-raspberrypi.htm https://ubuntuforums.org/showthread.php?t=935489

El problema que me preocuparía es, sin un cliente de correo, ¿cómo se filtra el spam/basura para no imprimirlo? También me preocupa un poco que los archivos adjuntos extraídos puedan causar una infección, pero tal vez solo estoy siendo paranoico.

Respuesta3

Puede utilizar una solución de dos pasos si el servidor de correo electrónico utiliza IMAP:

  1. Descargar archivos adjuntos de nuevos correos electrónicos a una carpeta
  2. Supervise la carpeta en busca de recién llegados e imprímalos.

Para el primer paso, puede utilizar un producto gratuito como Descargador de archivos adjuntos de correo edición gratuita, descrito como:

Mail Attachment Downloader descarga y procesa de forma segura todos los archivos adjuntos de su correo electrónico a la vez según sus preferencias de búsqueda. Deje todo su correo en su servidor; no interfiere con ningún otro programa de correo electrónico que utilice hoy para descargar su correo. Puede configurar varios filtros, como tamaño, tipo de archivo, de quién es, asunto del correo electrónico, fecha y hora, para especificar lo que desea descargar.

Para el segundo paso, y una vez que los archivos adjuntos estén almacenados en la carpeta especificada, puede imprimirlos todos usando este resumen de PowerShell:

Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10}}

Lo anterior requiere un producto PDF instalado que admita el verbo Imprimir, por ejemplo el programa gratuito Lector Foxit, donde no se requiere un entorno gráfico (iniciar sesión).

Este script de PowerShell se puede almacenar en un .ps1archivo y programar para que se ejecute periódicamente en el Programador de tareas.

Si está utilizando Adobe Reader, es posible que la última versión permanezca abierta después de la impresión. Esto se puede solucionar modificando el script a:

Get-ChildItem -Path 'C:\Temp\tmp2' -File | ForEach-Object { Start-Process -FilePath $_.Fullname -Verb Print -PassThru | %{sleep 10;$_} | kill}

Respuesta4

Podría usar un script de Python (bastante pequeño) como el que se muestra a continuación, que se conectará y recibirá el primer mensaje del remitente que especifique e imprimirá el mensaje en la salida estándar. Luego, con munpack(paquete mpacken Debian) puedes obtener el archivo adjunto y procesarlo.

El análisis del mensaje también se puede realizar.en pitón, lo que significa que no lo necesita mpacky su solución sería portátil a más entornos.

Controlarimaplibpara ver más opciones, como eliminar el mensaje cuando haya terminado o realizar otro tipo de búsquedas.

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

información relacionada