Enviar o eliminar mensajes Frozen en Exim

A veces se envían correos electrónicos a destinatarios que no existen de momento (se nos ha olvidado crear la dirección) o que no sabemos si alguna vez existirán. Si sucede lo anterior, Exim congelará (freeze) el mensaje.

Podemos ver los mensajes congelados (frozen) en la cola de Exim con:

exim -bp

Con este comando veremos el tiempo que lleva congelado, el tamaño, el identificador, su estado y el destinatario.
Si lo que queremos es que Exim intente enviar de nuevo los mensajes, haremos lo siguiente (uno o más identificadores a la vez):

exim -Mrm <message-id> [ <message-id> ... ]

Para reenviar todos a la vez:

exim -bp | grep frozen | awk '{print $3}' | xargs exim -v -M

Si lo que queremos es eliminar todos los mensajes congelados:

exiqgrep -z -i | xargs exim -Mrm

Más información: http://bradthemad.org/tech/notes/exim_cheatsheet.php

Firmar correos con DKIM y exim4

Con DKIM podemos autenticar correos electrónicos para que nuestros correos no sean marcados como spam. La configuración de Exim es send-only (sólo para enviar correos).

Primero reconfiguramos exim4 para poder enviar y recibir correos electrónicos usando SMTP: dpkg-reconfigure exim4-config
En las opciones seleccionamos lo siguiente:

internet site; mail is sent and received directly using SMTP
dominio.com
<blanco>
host.dominio.com;host;localhost.localdomain;localhost
<blanco>
<blanco>
No
mbox format in /var/mail/
Yes

Ahora creamos las claves para firmar los correos:

mkdir -p /etc/exim4/dkim
chown Debian-exim /etc/exim4/dkim/
chmod u=rx,go= /etc/exim4/dkim/
openssl genrsa -out /etc/exim4/dkim/dominio.com.private.key 2048
openssl rsa -in /etc/exim4/dkim/dominio.com.private.key -pubout

El último comando nos dará la clave pública que hay que usar en la configuración DNS de nuestro dominio. Deberemos crear una entrada TXT en nuestro servidor de la siguiente forma:

exim._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqG(...recortado...)0N7BNi4CZVkylsqnYuRuuot/N0XQIDAQAB"

No es necesario añadir una entrada MX porque eso sólo es para recibir correos.

El último paso es configurar exim para que use esta configuración: vi /etc/exim4/conf.d/transport/10_exim4-config_transport-macros

DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim4/dkim/dominio.com.private.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
DKIM_SELECTOR = exim

Ojo al DKIM_SELECTOR, que debe ser el mismo que hay en la línea de DNS exim._domainkey. Después de esto, reiniciamos el exim: /etc/init.d/exim4 restart

Para comprobar si funciona, mandar un correo a check-auth@verifier.port25.com

Otras formas de comprobar:
http://www.myiptest.com/staticpages/index.php/DomainKeys-DKIM-SPF-Validator-test
http://www.brandonchecketts.com/emailtest.php

Configurar exim4 con GMail o Google Apps

Para poder enviar correos electrónicos con una cuenta GMail o de Google Apps se puede hacer muy fácil con Exim.
Los pocos pasos a seguir son estos:

dpkg-reconfigure exim4-config

Ahora preguntará varias cosas. Las respuestas son:

mail sent by smarthost; received via SMTP or fetchmail
tudominio.com
127.0.0.1
en blanco
en blanco
smtp.gmail.com::587
No
No
mbox format in /var/mail/
Yes

Editar el archivo /etc/exim4/passwd.client donde añadiremos:

gmail-smtp.l.google.com:cuenta@tudominio.com:p4ssw0rd
*.google.com:cuenta@tudominio.com:p4ssw0rd
smtp.gmail.com:cuenta@tudominio.com:p4ssw0rd

Reiniciamos Exim: /etc/init.d/exim4 restart