Teléfono y Whatsapp: 675 18 68 80

Descargar adjuntos de correo desde consola (II)

Después de ver la primera parte, os traigo una segunda en la cual descargamos adjuntos de dos cuentas de correo, lo extraemos, sacamos los ficheros wav que se hayan enviado, los comprimimos a mp3 y por ultimo los subimos a un directorio de un servidor mediante FTP. ¿complejo, eh? no tanto.

instalar las dependencias

En esta ocasión vamos a usar offlineimap para conectarnos a un servidor de correo imap, mpack para estraet adjuntos y lame para convertir de wav a mp3:

sudo apt-get install offlineimap mpack lame

crear directorios

Estos servirán para almacenar los mensajes de cada cuenta de correo:

mkdir mail-cuenta1 
mkdir mail-cuenta2

y estos otros para almacenar temporalmente los adjuntos:

mkdir adjuntos
cd adjuntos
mkdir cuenta1
mkdir cuenta2

ficheros

Editar el fichero .offlineimaprc y añadir información de las dos cuentas de correo:

[general]
accounts = cuenta1,cuenta2
 
ui = Noninteractive.Basic
 
[Account cuenta1]
localrepository = cuenta1Local
remoterepository = cuenta1Servidor
 
[Repository cuenta1Local]
type = Maildir
localfolders = ~/mail-cuenta1/
 
[Repository cuenta1Servidor]
type = IMAP
remoteport = 143
remotehost = imap.servidor.com
remoteuser = cuenta1@servidor.com
remotepass = contrasenya
usetls = tls
 
 
 
[Account cuenta2]
localrepository = cuenta2Local
remoterepository = cuenta2Servidor
 
[Repository cuenta2Local]
type = Maildir
localfolders = ~/mail-cuenta2/
 
[Repository cuenta2Servidor]
type = IMAP
remoteport = 143
remotehost = imap.servidor.com
remoteuser = cuenta2@servidor.com
remotepass = contrasenya
usetls = tls

leer-cuenta1.sh

#!/bin/bash
 
directorioadjuntos=/home/usuario/adjuntos/cuenta1/
directoriocorreo=/home/usuario/mail-cuenta1/INBOX/new/*
directorioremoto=cuenta1
tiempo=300
 
while true; do
        echo "Descargar el correo a adjuntos."  
        offlineimap && munpack -C $directorioadjuntos $directoriocorreo
        rm -f $directoriocorreo
 
        echo "Eliminar ficheros descargados que NO sean wav."
        find $directorioadjuntos ! -name "*.wav" -type f -delete
 
        echo "Renombrar ficheros descargados y convertirlos a mp3."
        for audio in $directorioadjuntos*.wav; do
                nuevoaudio=$(stat -c %y $audio | cut -d '.' -f1 | tr -d ' ')
                lame -b 128 -h $audio $directorioadjuntos$nuevoaudio.mp3
        done    
 
        echo "Subiendo ficheros de adjuntos por FTP."
        sh ftp.sh $directorioadjuntos $directorioremoto
 
        echo "Eliminar ficheros adjuntos."
        rm -f $directorioadjuntos*.*
 
        echo "Esperando $tiempo segundos."
        sleep $tiempo
done
 
exit 0

leer-cuenta2.sh

#!/bin/bash
 
directorioadjuntos=/home/usuario/adjuntos/cuenta2/
directoriocorreo=/home/usuario/mail-cuenta2/INBOX/new/*
directorioremoto=cuenta2
tiempo=300
 
while true; do
        echo "Descargar el correo a adjuntos."  
        offlineimap && munpack -C $directorioadjuntos $directoriocorreo
        rm -f $directoriocorreo
 
        echo "Eliminar ficheros descargados que NO sean wav."
        find $directorioadjuntos ! -name "*.wav" -type f -delete
 
        echo "Renombrar ficheros descargados y convertirlos a mp3."
        for audio in $directorioadjuntos*.wav; do
                nuevoaudio=$(stat -c %y $audio | cut -d '.' -f1 | tr -d ' ')
                lame -b 128 -h $audio $directorioadjuntos$nuevoaudio.mp3
        done    
 
        echo "Subiendo ficheros de adjuntos por FTP."
        sh ftp.sh $directorioadjuntos $directorioremoto
 
        echo "Eliminar ficheros adjuntos."
        rm -f $directorioadjuntos*.*
 
        echo "Esperando $tiempo segundos."
        sleep $tiempo
done
 
exit 0

ftp.sh

#!/bin/bash
 
directorioadjuntos=$1
directorioremoto=$2
 
 
ftp -inv www.servidor.com <<FINFTP
user usuario contrasenya
binary
cd www.servidor.com/directorio/$directorioremoto
lcd $directorioadjuntos
mput *.mp3
quit
FINFTP

ejecutar

para ejecutarlo, basta con dar permisos de ejecución:

chmod +x leer-cuenta1.sh
chmod +x leer-cuenta2.sh

y ejecutar cada uno de los ficheros. Si estos se ejecutan en u servidor remoto, tal vez quieras revisar esta entrada sobre cómo ejecutar comandos en segundo plano en Linux.