Correo electrónico · 5 min read · Jan 01, 2026
Recuperando correos electrónicos de servidores remotos con getmail (Debian Etch)
Recuperando correos electrónicos de servidores remotos con getmail (Debian Etch)
Versión 1.1
Autor: Falko Timme
Getmail es un programa para recuperar correos electrónicos de servidores remotos; es muy similar a fetchmail, pero más flexible. Por ejemplo, se puede configurar para entregar correos directamente a un buzón Maildir o mbox sin necesidad de un MTA como Postfix, pero por supuesto también puede enviar los correos a través de un MTA si lo deseas. Getmail puede usar filtros llamados como SpamAssassin y ClamAV para escanear los correos, y incluso puedes indicarle a getmail que elimine los correos en el servidor original solo después de un cierto número de días.
¡No emito ninguna garantía de que esto funcione para ti!
1 Nota Preliminar
He probado getmail en un sistema Debian Etch con un usuario local llamado falko que tiene la dirección de correo electrónico local [email protected].
2 Instalar getmail
Para instalar getmail, todo lo que tenemos que hacer es ejecutar
apt-get install getmail4como root.
3 Configurar getmail
Getmail se puede configurar a través de archivos de configuración por usuario, y getmail puede ser ejecutado por ese mismo usuario. Para hacer que getmail se ejecute automáticamente, podemos crear un trabajo cron para ese usuario.
En este capítulo asumo que estás conectado como el usuario falko, ¡no como root!
Getmail busca el archivo de configuración ~/.getmail/getmailrc, así que primero tenemos que crear el directorio ~/.getmail con permisos de 0700:
mkdir -m 0700 ~/.getmailLuego creamos el archivo de configuración ~/.getmail/getmailrc. Un archivo getmailrc debe tener al menos una sección [retriever] y una sección [destination].
vi ~/.getmail/getmailrc| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Maildir path = ~/Maildir/ |
El ejemplo anterior asume que falko tiene una cuenta de correo con el nombre de usuario [email protected] y la contraseña secret en el servidor pop.someprovider.tld, y que tiene una cuenta Maildir en este servidor, siendo ~/Maildir/ su directorio Maildir.
Eso ya es suficiente para configurar getmail. falko podría ahora recuperar correos electrónicos del servidor remoto simplemente ejecutando
getmailPor supuesto, falko no quiere iniciar la recuperación manualmente cada pocos minutos, así que creamos un trabajo cron para él. Aún como el usuario falko, ejecutamos
crontab -ey creamos un trabajo cron como este (que iniciaría getmail cada cinco minutos):
| */5 * * * * /usr/bin/getmail &> /dev/null |
Ahora supongamos que falko no tiene una cuenta Maildir, sino una cuenta mbox en este servidor (/var/mail/falko). Todo lo que tenemos que hacer es modificar la sección [destination] en ~/.getmail/getmailrc, por ejemplo, así:
vi ~/.getmail/getmailrc| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = Mboxrd path = /var/mail/falko |
En el siguiente ejemplo queremos enviar los correos electrónicos que recuperamos del servidor remoto a través de un MTA como Postfix (asumo que Postfix ya está instalado y funcionando). Postfix puede encargarse de si tiene que entregar los correos a Maildir o mbox, y también puede invocar escáneres de spam y virus, por ejemplo, a través de amavisd-new.
vi ~/.getmail/getmailrc| [retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = [email protected] password = secret [destination] type = MDA_external path = /usr/sbin/sendmail arguments = ("-i", "-bm", "[email protected]") unixfrom = true |
(Como ves, le decimos a getmail que la dirección de correo electrónico local de falko es [email protected].)
El interruptor -i en la línea de argumentos es importante (gracias a Chris Moules por la sugerencia):
*El problema es que algunos correos, cuando se entregan a sendmail, se truncarán. Esto puede suceder cuando el cuerpo del mensaje extraído de la fuente contiene una línea con un solo punto (.). En SMTP, esto se usa para indicar el final del mensaje. Cuando se invoca sendmail en la línea de comandos, el comportamiento predeterminado es finalizar el mensaje en EOF o en un solo punto.
Cita de la página de manual de sendmail de Postfix:
Por defecto, Postfix sendmail(1) lee un mensaje de la entrada estándar hasta EOF o hasta que
lee una línea con solo un carácter de punto (.) y organiza la entrega.–
Cita de la página de manual de sendmail:
Sin ninguna bandera, sendmail lee su entrada estándar hasta un final de archivo o
una línea que consiste solo en un punto y envía una copia del mensaje
encontrado allí a todas las direcciones listadas.–
Había recibido avisos de clientes que en ocasiones, su correo estaba ‘corrupto’, ‘faltante’ o ‘truncado’. Después de mirar los mensajes en nuestro servidor y lo que había en su sistema de correo, estaba claro que había un problema.
Un poco de investigación mostró que el sendmail local necesitaba ser invocado con la opción ‘-i’:
Cita de la página de manual de sendmail de Postfix:
-i Cuando se lee un mensaje de la entrada estándar, no tratar una línea con solo un carácter de punto como el final de la entrada.
–
Esto hace que sendmail espere hasta el final del archivo hasta que se envíe el mensaje.*
Puedes probar el interruptor -i con un correo como el siguiente:
---
Cuatro:
....
Tres:
...
Dos:
..
Uno:
.
---3.1 Opciones
También podemos agregar una sección [options] a ~/.getmail/getmailrc donde podemos cambiar el comportamiento predeterminado de getmail, por ejemplo, así:
vi ~/.getmail/getmailrc| [...] [options] verbose = 1 read_all = false delete = true message_log_syslog = true |
Las opciones anteriores le dicen a getmail que imprima mensajes sobre los mensajes recuperados, que recupere solo mensajes nuevos, que elimine mensajes del servidor remoto después de la recuperación y que registre en el syslog.
Si deseas eliminar solo los correos más antiguos de diez días, podrías cambiar la sección [options] de la siguiente manera:
vi ~/.getmail/getmailrc| [...] [options] verbose = 1 read_all = false delete_after = 10 message_log_syslog = true |
Puedes aprender más sobre todas las opciones disponibles en http://pyropus.ca/software/getmail/configuration.html#conf-options.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.