# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Añadir la cabecera Content-type al usar el comando mail o mailx


En algunas versiones del comando mail|mailx|Mail (creo que en las antiguas) se podía especificar una cabecera con el parámetro -a:

$ mail --help
usage: mail [-dEIinv] [-a header] [-b bcc-addr] [-c cc-addr] [-s subject] to-addr ...

De este modo era sencillo especificar cualquier cabecera y modificarla, como por ejemplo el Content-type si quisieramos enviar un correo en formato HTML (text/html). En cambio en nuevas versiones este parámetro ha desaparecido, y si queremos añadir el Content-type, por ejemplo, hay que engañar al MTA del siguiente modo:

$ cat mensaje.html | mail -s "$(echo -e "Este es el asunto\nContent-Type: text/html")" foo@bar.com

Como véis, a la hora de especificar el subject del mail con el parámetro -s, hacemos la trampa de crear un salto de línea y especificar después el Content-type, al igual que podemos ver en las cabeceras de un email estándar. De este modo, el MTA no asocia la segunda línea con el Subject sino como si fuera una cabecera normal de Content Type.

cPanel: Configurar exim en puerto alternativo


Son muchos los ISP (véase Telefónica por ejemplo) que aleatoriamente bloquean el puerto SMTP 25 a sus clientes debido a que desde sus IPs (habitualmente dinámicas) se realizan envíos de correo no solicitado (SPAM). Normalmente el cliente no es el culpable ya que hereda una IP con mala reputación.

Este problema impide que el cliente pueda enviar correos con cuentas externas a su ISP de forma correcta, provocando fallos en todas sus cuentas de correo. Los proveedores de Hosting llegados a este punto se pueden ver en la obligación de ofrecer al cliente puertos alternativos para el uso del correo electrónico.

La primera opción puede ser ofrecer el uso de SMTP seguro a través de puerto 465. Si tampoco es viable esta opción, en servidores con cPanel y Exim podemos habilitar de forma sencilla una nueva copia del servicio (tendríamos dos copias de Exim corriendo en un mismo servidor) en otro puerto, por ejemplo el 26.

Para ello accedemos a WHM vía web, a través del puerto 2086 o 2087 y accedemos a la sección Service Manager, donde encontraremos la opción de asignar un puerto alternativo a Exim, el que queramos:

Exim puerto alternativo

A partir de ese momento ya podremos ofrecer ese puerto alternativo a los clientes, verificadlo ejecutando un telnet contra el nuevo puerto:

$ telnet servidor 26
Trying xx.xx.xx.xx...
Connected to xx.xx.xx.xx.
Escape character is '^]'.
220-xx.xx.xx.xx ESMTP Exim x.xx #1 Sun, 04 Apr 2010 19:18:22 +0200
220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.

Utilidades para Mailenable


En más de una ocasión estas utilidades me han sacado de un apuro a la hora de administrar servidores de correo MailEnable, así que os recomiendo guardarlas en vuestras herramientas de administración, o por lo menos en los marcadores de vuestro navegador.

- Enlace Utilidades para Mailenable.

Personalmente he utilizado las siguientes, con muy buenos resultados:

Hay muchas más, revisad en primer enlace y quizás encontréis algunas que os sean de utilidad.

FAQ de Postfix


POSTFIX

Un enlace de utilidad para los marcadores de un administrador del MTA Postfix. Se trata de la base de datos de preguntas frecuentes (FAQ) relacionadas con Postfix, sus configuraciones, errores típicos, optimización, etc

- Enlace Preguntas Frecuentes (FAQ) Postfix

Exim: Limitar número de destinatarios por email


Es conveniente fijar un límite de destinatarios Bcc / cc por correo en cualquier MTA, en el caso de Exim, hay que añadir los siguientes parámetros en el fichero de configuración /etc/exim.conf:

recipients_max = 20
recipients_max_reject = true

Cabe decir que de este modo limitas de forma global, para limitar de forma individual para cada dominio es necesario configurar las ACLs, es una configuración específica que por el momento veo demasiado extensa para explicar, si alguien lo necesita puede añadir un comentario y lo tratamos.

Ah, un apunte final, si utilizáis listas de correo con Mailman, esta regla os afectará, y las listas solamente podrán tener 20 destinatarios (o los que configuréis en exim), para saltar esta restricción añadimos lo siguiente en el fichero de configuración de Mailman mm_cfg.py:

# Max recipients for each message
SMTP_MAX_RCPTS = 10

# Max messages sent in each SMTP connection
SMTP_MAX_SESSIONS_PER_CONNECTION = 10

De este modo Mailman sabrá como administrar el envío de mensajes para evitar la restricción de exim.

Exim: Comandos básicos


Exim es un agente de transporte de correo (Mail Transport Agent, MTA) que puede ser utilizado en la mayoría de sistemas Unix, siendo una de las opciones más comunes, junto con Qmail o Postfix para servicio de correo servidores Unix.

Partiendo de la base de que conocemos el funcionamiento de Exim, los comandos básicos que un administrador de sistemas que utilice este MTA son:

Lista por pantalla los correos en cola:

exim -bp

Sacar por pantalla el nº de correos en cola:

exim -bpc

Muestra un resumen de los correos en cola (dominio, nº de correos, tiempo en cola y peso):

exim -bp | exiqsumm

Eliminar un correo en concreto:

exim -Mrm '<id correo>'

Congelar un correo:

exim -Mf '<id correo>'

Procesar un correo:

exim -M '<id correo>'

Eliminar todos los correos congelados:

exiqgrep -z -i | xargs exim -Mrm

Sacar por pantalla que está haciendo exim en este momento:

exiwhat

Hacer un traceroute a una dirección de correo:

exim -bt '<id correo>'

Ver las cabeceras de un correo:

exim -Mvh '<id correo>'

Ver el cuerpo de un correo:

exim -Mvb '<id correo>'

Ver los logs de un correo:

exim -Mvl '<id correo>'

Forzar cola de correo:

exim -qff

Buscar correos en cola de un determinado emisor:

exiqgrep -f [usuario]@dominio

Buscar correos en cola de un determinado receptor:

exiqgrep -r [usuario]@dominio

Respecto a estos dos últimos comandos, exigrep es un comando extremadamente útil, dispone de muchas otras opciones que pueden ser revisadas en su respectiva ayuda.

Eliminar la cola de correo completa (dos formas):

exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | sh
rm /var/spool/exim/input/*

Conociendo estos comandos (o teniendolos a mano) uno ya puede moverse con soltura en exim.