Teléfono y Whatsapp: 675 18 68 80

Descargar adjuntos de correo desde consola (I)

Estaréis pensando: ¿pero qué haces loco? si ya existen interfaces web o en su defecto clientes GUI para Linux, Mac, Windows, Android…etc para poder ver el correo y descargar adjuntos, ¿para qué hacerlo mediante bash?.
Pues bien, resulta que hay veces que es necesario automatizar cosas en servidores dedicados para que, por ejemplo nada más recibir un correo con un adjunto se descargue y lo lleve a otro servidor mediante FTP.

Instalamos offlineimap y mpack:

sudo apt-get install offlineimap mpack

creamos una carpeta en nuestro /home, por ejemplo ~/mail/:

mkdir mail

ahora creamos un fichero de texto y lo guardamos en ~/.offlineimaprc , es decir, en nuestra carpeta personal:

[general]
accounts = GMail
 
ui = Noninteractive.Basic
 
[Account GMail]
localrepository = GMailLocalMaildirRepository
remoterepository = GMailServerRepository
 
[Repository GMailLocalMaildirRepository]
type = Maildir
localfolders = ~/mail/
 
[Repository GMailServerRepository]
type = IMAP
remotehost = imap.gmail.com
remoteuser = tucuenta@gmail.com
remotepass = tucontrasenya
ssl = yes

y por último, ejecutamos el script:

offlineimap && munpack /home/usuario/mail/LABEL/new/*

Donde LABEL es la carpeta (INBOX, Trash..etc) que queremos que saque los adjuntos. Este comando nos lo extraerá en nuestro /home, pero si queremos extraerlo en una carpeta personalizada, deberemos ejecutar:

mkdir adjuntos
offlineimap && munpack -C /home/usuario/adjuntos/ /home/usuario/mail/LABEL/new/*

Al ejecutar inicialmente uno de estos dos comandos, nos mostrará unas advertencias en la consola para que importemos el certificado SSL en el fichero ~/.offlineimaprc . Basta con añadir la línea:

 cert_fingerprint = laclavequenosdigalaconsolaparaimportar

guardamos, y ejecutamos el anterior comando y ahora si que debería de descargarnos todos los correos en la carpeta mail de todas las carpetas que tengamos en el servidor, separándolo en carpetas físicas.

Si no queremos perder los correos, es muy importante NO borrar los ficheros de la carpeta mail, de lo contrario, al sincronizar de nuevo con el servidor, se borrarán allí también

Ahora vamos a crear un pequeño script que nos descargue nuevos correos de la carpeta INBOX, extraiga los adjuntos en la carpeta adjuntos y elimine el mensaje recibido:

#!/bin/bash
offlineimap && munpack -C /home/usuario/adjuntos/ /home/usuario/mail/INBOX/new/*
rm -f /home/prueba/mail/INBOX/new/*

Para automatizar el proceso determinados días de la semana, se puede crear un cron o bien en el propio script se puede hacer un bucle y un sleep para que este se repita indefinidamente cada tiempo definido en el sleep, como por ejemplo:

#!/bin/bash
while true; do
     offlineimap && munpack -C /home/usuario/adjuntos/ /home/usuario/mail/INBOX/new/*
     rm -f /home/prueba/mail/INBOX/new/*
     sleep 350
done

Nota: en la segunda parte, hay un ejemplo con dos cuentas que extraen ficheros de audio wav del correo, lo comprimen a mp3 y lo suben a un directorio de un servidor FTP.