Enviar correos con Postfix y Gmail

(Actualización del 4 de marzo de 2022): me llegó un correo diciendo que el 30 de mayo puede que pierdas acceso a aplicaciones que utilizan una tecnología de inicio de sesión menos segura. Todo lo que se puede leer a continuación es válido sólo que la contraseña a utilizar no es la que se utiliza para leer el correo de Gmail vía web, sino que hay que crear una contraseña de aplicación, de tal modo la contraseña será la contraseña de 16 caracteres que hay que generar desde tu cuenta de Google. Para ello ir a: Gestionar tu cuenta de Google -> Seguridad -> Iniciar sesión en Google -> Contraseña de aplicaciones.

A partir de esta línea viene el artículo original:

Se pueden enviar correos de manera automática utilizando Postfix teniendo una cuenta de Gmail. Lo utilizo para que las Raspberries me envíen algunos correos de notificación, por ejemplo, la utilidad cron-apt envía un correo si existen actualizaciones pendientes. La configuración de cron-apt en el sistema es muy sencilla:

$ cat /etc/cron-apt/config
APTCOMMAND=/usr/bin/apt-get
MAILTO="usuario@hotmail.com"
MAILON="upgrade"
DIFFONCHANGES=prepend

El fichero de configuración dice que se envíe un correo a la dirección de correo usuario@hotmail.com, ¿pero cómo se puede enviar un correo de manera automática sin tener un servidor de correo propio? Aquí entra en juego Gmail y Postfix. Supongamos que tengo una cuenta de Gmail, por ejemplo, usuario@gmail.com con la contraseña: password.

Lo primero será instalar Postfix, lo cual es muy sencillo en una Raspberry o en un sistema operativo Debian:

$ sudo apt install postfix

Una vez instalado el servidor de correo, hay que configurarlo de tal modo que cuando se envíe un correo utilizando la Raspberry lo envíe a través de Gmail y, claro, para hacerlo tiene que autenticarse. Lo primero sería editar el fichero de configuración de Postfix:

$ sudo vi /etc/postfix/main.cf

Se añaden las siguientes lineas:

relayhost = [smtp.gmail.com]:587
# Enable SASL authentication
smtp_sasl_auth_enable = yes
# Disallow methods that allow anonymous authentication
smtp_sasl_security_options = noanonymous
# Location of sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
# Enable STARTTLS encryption
smtp_tls_security_level = encrypt
# Location of CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Estas líneas vienen a decir que todos los correos se enviarán a través de un relay host llamado smtp.gmail.com y utilizando el puerto 587.

Se hará utilizando autenticación SSAL, que la contraseña y el usuario irán encriptados, que no se permitirá hacerlo de forma anónima y que el usuario y la contraseña se encontrarán en /etc/postfix/sasl/sasl_passwd

Lo primero es crear el directorio donde se almacenará el fichero:

$ sudo mkdir /etc/postfix/sasl

Se edita el fichero sasl_passwd en ese directorio

$ sudo vi /etc/postfix/sasl/sasl_passwd

En ese fichero se escribirá:

[smtp.gmail.com]:587 usuario@gmail.com:password

Ese fichero será propiedad de root y sólo el súper usuario tendrá permisos de lectura/escritura:

$ sudo chown root:root /etc/postfix/sasl/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl/sasl_passwd

Como Postfix espera lo que llama un hash de ese fichero, hay que crearlo con el comando postmap:

$ sudo postmap /etc/postfix/sasl/sasl_passwd

Al ejecutar el comando se generará un fichero de mismo nombre, pero extensión .db, que es el hash que espera Postfix.

Una vez generado ese fichero .db se reiniciará Postfix:

$ sudo systemctl restart postfix.service

Y con esto ya se podran enviar correos utilizando el servidor de Gmail como relay host. Se puede probar con este comando:

echo "Prueba de correo"|mailx -s "Prueba de correo" usuario@hotmail.com

Y llegarán correos de la utilidad cron-apt d’aquesta guisa:

Utilizo también un pequeño truco para centralizar todos los correos en un único usuario y ese usuario lo redirigo a Gmail, aunque se puede reenviar a donde se quiera.

Veamos, en el fichero /etc/aliases hago un alias de todo al usuario root y de root al usuario que manejo habitualmente que es el usuario magb:

# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
monit: root
root: magb

Eso quiere decir que todos los correos acabarán en el usuario magb y la manera normal de ver esos correos es entrar en la máquina en cuestión y verlos con el comando mail. Pero me resulta más cómodo redirigir todo a una cuenta de Gmail y para ello me creo en el directorio HOME de ese usuario un fichero llamado .forward con permisos 600:

$ ls -al .forward
-rw------- 1 magb magb 37 oct 14  2016 .forward

Y el contenido:

$ cat .forward
usuario@gmail.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *