9 de Febrero, 2007

Extendiendo a mail, otra vez

Pero esta vez con un hack algo tonto que nos va a permitir enviar correos con soporte MIME en nuestros scripts con mail(1), pero sin tener que llegar a modificar el fuente.

Cuando ejecutamos mail, podemos indicar el asunto del mensaje con la opción -s, y el programa no verificará la entrada.

$ echo "Hola mundo!" | mail -s "Esto es un ejemplo" juanjo@localhost

Con esta linea se recibirá el siguiente mensaje:

From reidrac@... Fri Feb  9 18:54:26 2007
X-Bogosity: Ham, spamicity=0.196944
Received: from llsa336-a01.servidoresdns.net (...net [82.223.190.*])
        by blackshell.usebox.net (8.13.4/8.13.4) with ESMTP id l198sQW3029026
        for <juanjo@...>; Fri, 9 Feb 2007 18:54:26 +0100 (CET)
Received: from localhost (*.onocable.ono.com [84.120.179.*])
        by smtp-01.servidoresdns.net (Postfix) with ESMTP id 348034A3D0
        for <juanjo@...>; Fri,  9 Feb 2007 18:53:57 +0100 (CET)
To: juanjo@...
Subject: Esto es un ejemplo
Message-Id: <20070209175357.348034A3D0@smtp-01.servidoresdns.net>
Date: Fri,  9 Feb 2007 18:53:57 +0100 (CET)
From: reidrac@...
Status: R

Hola mundo!

He resaltado la linea importante que nos permitirá realizar nuestro hack. Supongamos que queremos mandar un correo HTML de forma correcta, haríamos algo tal que:

$ echo "<p><b>Hola</b> <em>mundo!</em></p>" \
 | mail -s "Esto es un ejemplo^MMIME-Version: 1.0^MContent-Type: text/html" \
 juanjo@localhost

Con lo que obtendríamos el siguiente correo:

From reidrac@... Fri Feb  9 19:12:03 2007
X-Bogosity: Unsure, spamicity=0.485422
Received: from llsa736-a01.servidoresdns.net (...net [82.223.190.*])
        by blackshell.usebox.net (8.13.4/8.13.4) with ESMTP id l19BC3Em009642
        for <juanjo@...>; Fri, 9 Feb 2007 19:12:03 +0100 (CET)
Received: from localhost (*.onocable.ono.com [84.120.179.*])
        by smtp-01.servidoresdns.net (Postfix) with ESMTP id D7D0C24C330
        for <juanjo@...>; Fri,  9 Feb 2007 19:11:34 +0100 (CET)
To: juanjo@...
Subject: Esto es un ejemplo
MIME-Version: 1.0
Content-Type: text/html
Message-Id: <20070209181134.D7D0C24C330@smtp-01.servidoresdns.net>
Date: Fri,  9 Feb 2007 19:11:34 +0100 (CET)
From: reidrac@...
Status: R

<p><b>Hola</b> <em>mundo!</em></p>

Creo que está claro lo que hemos hecho :). Simplemente añadimos dos cabeceras tras el subject empleando el salto de linea (CTRL + v seguido de CRTL + m en el shell), que es el limitador que indica el RFC822 para las cabeceras en los mensajes de correo electrónico.

Esto a mail(1) le da igual, y para nuestro cliente de correo será importante porque, efectivamente, hemos enviado un mensaje en formato HTML, y gracias a las nuevas cabeceras se mostrará correctamente ;).

A tener en cuenta:

  • Dependiendo del shell, no siempre prepararemos las cabeceras igual. En mi caso he comprobado que con BASH el método descrito funciona, pero con KSH no. Podemos prepara el asunto aparte con echo(1) (algo así como SUBJECT="$(echo -e "Asunto\nExtra: valor")", y luego incluimos la variable en mail -s "$SUBJECT" ...).
  • No podemos indicar cabeceras de las que ya se encarga mail(1).
  • Esto es un hack ;).

Anotación por Juan J. Martínez, clasificada en: hacks, scripting.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: