Problema: Nos vemos obligados a utilizar una cuenta que permite únicamente acceso por OWA (outlook web access) cuyos servidores tienen deshabilitado el acceso POP y además tampoco funcionan las reglas de reenvió
Solución 1º: Usar davmail para crear un acceso pop o imap
Problema de la solucón 1º: La cuenta que va a leer desde ese acceso pop nos va a pedir que usemos un certificado SSL no auto firmado y ni queremos pagarlo ni queremos dar acceso a nuestra cuenta sin encriptar
Solución: davmail + pop2imap + cuenta intermedia + nuestra cuenta final
1- Crear directorio para el script e instalar las herramientas necesarias
pi@bot ~ $ mkdir .owa
pi@bot ~ $ cd .owa
pi@bot ~/.owa $ wget http://downloads.sourceforge.net/project/davmail/davmail/4.4.0/davmail-4.4.0-2198.zip
pi@bot ~/.owa $ unzip davmail-*.zip
pi@bot ~/.owa $ rm davmail-*.zip
pi@bot ~/.owa $ aptitude install libmail-pop3client-perl libmail-imapclient-perl libdigest-hmac-perl libemail-simple-perl libdate-manip-perl
pi@bot ~/.owa $ wget http://www.linux-france.org/prj/pop2imap/dist/pop2imap-1.21.tgz
pi@bot ~/.owa $ tar -xzvf pop2imap-*.tgz
pi@bot ~/.owa $ cd pop2imap*
pi@bot ~/.owa/pop2imap-1.21 $ make install
pi@bot ~/.owa/pop2imap-1.21 $ cd ..
pi@bot ~/.owa $ rm -R pop2imap*
pi@bot ~/.owa $ touch owa.sh
pi@bot ~/.owa $ chmod +x owa.sh
2- Configurar DavMail
davmail.properties
:
...
# Modo servidor
davmail.server=true
# Exchange OWA o EWS url
davmail.url=https://mail.ejemplo.com
# Puerto para el acceso POP
davmail.popPort=1110
# El resto de servicios no nos interesan
davmail.caldavPort=
davmail.imapPort=
davmail.ldapPort=
davmail.smtpPort=
# No permitir acceso remoto (solo lo vamos a usar en local)
davmail.allowRemote=false
# Lo dejamos vacio para que escriba el log en la misma carpeta del script
davmail.logFilePath=
...
3- Crear script de ejecución
owa.sh
:
#!/bin/bash
#Editar con nuestros datos
usr1=origen@outloock.com
pas1=passorigen
imp=imap.gmail.com
prt=993
usr2=destino.intermedio@gmail.com
pas2=passdestino
#Crear previmanete una etiqueta en nuestra cuenta destino con este nombre
fld=owa
log() {
echo "$1"
echo "$1" >> owa.log
}
pi2=$(ps -ef | grep pop2imap | sed '/ grep /d' | awk '{print $2}')
pid=$(ps -ef | grep davmail | sed '/ grep /d' | awk '{print $2}')
START_TIME=$SECONDS
cd ~/.owa
dat=$(date "+%d/%m/%Y %H:%M:%S")
log "==== $dat ===="
if [ "$pid" != "" ]; then
if [ "$pi2" != "" ]; then
log "OWA ya esta corriendo (davmail=$pid y pop2imap=$pi2)"
exit 1
else
log "Davmail ya esta corriendo con pid=$pid"
fi
else
if [ "$pi2" != "" ]; then
log "Detenemos pop2imap colgado ($pi2)"
kill "$pi2"
fi
./davmail.sh davmail.properties > /dev/null &
pid=$!
log "Davmail iniciado con pid=$pid"
sleep 2
fi
log "Iniciando pop2imap"
pop2imap --host1 localhost --port1 1110 --user1 $usr1 --password1 $pas1 --host2 $imp --port2 $prt --user2 $usr2 --password2 $pas2 --folder $fld --ssl2 > pop2imap.log
log "pop2imap parado (pid=$!)"
kill "$pid"
log "Davmail parado"
int=$(($SECONDS - $START_TIME))
mig=$(grep "No Message-ID Need Transfer" pop2imap.log | wc -l)
msg="$mig mails subidos en $int segundos"
log "$msg"
if [ $mig -gt 0 ]; then
echo "$dat - $msg" >> summary.log
fi
4- Crear tarea programada
pi@bot ~ $ crontab -e
Añadir las siguientes lineas para que el script se ejecute periódicamente
# Cada hora en horario laboral
0 7-20 * * 1,2,3,4 /bin/bash ~/.owa/owa.sh
0 7-18 * * 5 /bin/bash ~/.owa/owa.sh
# Cada 4 horas fuera de horario laboral y entre semana
0 23,3 * * 1,2,3,4 /bin/bash ~/.owa/owa.sh
# Cada 8 horas en fin de semana
0 */8 * 6,7 /bin/bash ~/.owa/owa.sh
5- Configurar nuestra cuenta final
Ahora nuestra cuenta final puede leer vía pop de la cuenta intermedia (que funciona como espejo del owa) sin problemas.
Notas: Se podría usar la salida imap que da davmail para migrar de imap a imap pero según la documentación de davmail su acceso pop es más eficiente. También se podría pensar en prescindir de la cuenta intermedia y cargarlo todo en la cuenta final pero entonces no se ejecutarían nuestros filtros sobre este correo entrante y además si borrásemos un mail este volvería a aparecer en la próxima sincronización.