Email

De Astillas.net

Enlaces y referencias

Conceptos

Textos en cabeceras MIME

El documento RFC 2047 describe una norma para permitir caracteres internacionales (aquellos fuera del estándar US-ASCII) en los campos del encabezado de los mensajes de correo electrónico. Es una extensión al documento RFC 822 y consiste en definir un conjunto de secuencias de caracteres normales como secuencias codificadas de tal manera que no se puedan confundir accidentalmente con el contenido normal del encabezado del mensaje.

Estas secuencias están acotadas por las expresiones =? y ?= e incluyen dos caracteres de cierre de interrogación (?) entre medias conteniendo el juego de caracteres y el tipo de codificación del texto:

=? juego-de-caracteres ? tipo-de-codificación ? texto-codificado ?=

Y donde tenemos algunas reglas más que seguir:

  1. No se admiten caracteres en blanco (o tabulados horizontales) dentro de la secuencia. En caso de existir alguno se considerarán secuencias individuales.
  2. La longitud total de una secuencia codificada no puede superar los 75 caracteres de longitud incluyendo las secuencias de inicio y fin.

Las secuencias codificadas están formadas por:

juego-de-caracteres (charset)
El juego de caracteres puede ser cualquiera de los permitidos en la norma MIME para el cuerpo de un mensaje (text/plain) o cualquiera de los registrados con el IANA y puede estar en mayúsculas o en minúsculas.
tipo-de-codificación (encoding)
Actualmente hay dos tipos definidos: Q para quoted-printable y B para Base 64; también pueden aparecer en minúsculas o en mayúsculas.
texto-codificado
Formado por cualquier carácter ASCII imprimible exceptuando el espacio en blanco (que debe ser sustituído por la secuencia =20), el tabulado (que está prohibido) y el cierre de interrogación ?.

Ejemplos:

=?utf-8?Q?Servicio_de_Notificaciones_Electrónica?= Servicio de Notificaciones Electrónica
=?US-ASCII?Q?Keith_Moore?= Keith Moore
=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= If you can read this yo

Codificación Q

Es similar a la que aparece en el RFC 2045 y consiste en utilizar una secuencia especialpara representar cualquier carácter no imprimible del juego de caracteres ASCII. Dicha secuencia comienza por el carácter igual a seguido por dos dígitos hexadecimales (en mayúsculas) que representan su valor númerico que suele coincidir con el número de orden dentro del juego de caracteres. El carácter = se representa como =3D y el espacio en blanco como =20.

Recetario

Reescribiendo el asunto del mensaje

Cuando necesitamos reescribir el campo asunto de un mensaje de correo podemos utilizar una mezcla de herramientas que trabajan bien entre sí:

Todo ello envuelto en un programa como el siguiente ...

#!/bin/sh

#   Como ayuda para depurar fijamos un valor 
#   predeterminado para la etiqueta 
LABEL=${1:-LABEL}

#   Tenemos que salvar todo el mensaje entrante en un archivo temporal
#   porque las operaciones posteriores se llevan en dos fases
TMPMSG=/tmp/$(basename $0).$$ 
cat > $TMPMSG

# La primera fase es leer el campo 'Subject' y almacenarlo en una 
# variable,
SUBJECT=$(reformail -x Subject: < $TMPMSG)

# a la que añadimos el etiquetado entre corchetes,
NEWSUBJECTPARAM="Subject: [${LABEL}] ${SUBJECT}"

# y la segunda fase consiste en sustituir el campo 'subject' por el que hemos
# formado y renombrar el anterior con el prefijo 'old-' para no perder
# contenido.
reformail -i "${NEWSUBJECTPARAM}" < $TMPMSG

... y situado en el filtro de correo de la cuenta o cuentas de correo que necesitamos; lo siguiente es un ejemplo de cómo añadir una etiqueta especial a aquellos mensajes que contengan notificaciones de Correos y Telégrafos y está situado dentro del archivo $HOME/.mailfilter:

#
#   Notificaciones e correos.es
#
if (/^From:.*correos.es/) 
{
    xfilter "/usr/local/bin/add2subject CORREOS"
}

Testear autentificación IMAP

Si utilizamos una conexión plana con un servidor IMAP lo podremos hacer así:

 $ telnet taquiones.net imap
 Trying 80.68.92.119...
 Connected to taquiones.net.
 Escape character is '^]'.
 * OK [CAPABILITY IMAP4rev1 ... AUTH=PLAIN] Dovecot ready.
 a1 LOGIN victor PASSWORD
 a1 OK [CAPABILITY IMAP4rev1 ... SPECIAL-USE] Logged in
 a2 LOGOUT
 a3 LOGOUT
 * BYE Logging out
 a3 OK Logout completed.
 Connection closed by foreign host.

Y si necesitamos una conexión segura tendremos que utilizar openssh en lugar de telnet variando el puerto según el servidor esté configurado:

 $ openssl s_client -connect taquiones.net:995 -quiet
 depth=1 C = ES, ST = Madrid, O = Taquiones, OU = CA, CN = taquiones.net, emailAddress = postmaster@taquiones.net
 verify error:num=19:self signed certificate in certificate chain
 verify return:0

Herramientas

reformail

Programa especializado en manipular mensajes de correo electrónico que generalmente se emplea como filtro parcial o final ya que toma sus datos de la entrada estándar y envía sus resultados también al canal estándar.

Tiene tres modos de funcionamiento:

Extraer mensajes individuales
Empleando el parámetro -s el programa extrae los mensajes de correo individuales del flujo de entrada y ejecuta el programa externo indicado como parámetro con cada uno de ellos en su canal estándar
reformail -s programa
Detectar mensajes duplicados
Si se usa con el parámetro -D reformail mantiene una base de datos de identificadores de correo (Message ID) y comprueba si el mensaje recibido está ya en ella. Si es así, si ya ha sido recibido con anterioridad, el programa termina con código 1
reformail -D longitud_del_registro_de_IDS [ archivo_registro_de_IDS ]
Manipular cabeceras de correo
El resto de los parámetros permite añadir, eliminar, unir e insertar encabezados de correo tanto si ya existen en el mensaje como si no. Es conveniente consultar la documentación dado el número de opciones aunque es necesario tener en cuenta que cuando se menciona una cabecera y un valor debe hacerse así
reformail -i nombre_cabecera:\svalor_de_cabecera
ya que en caso contrario, cuando no encuentra el carácter dos puntos o el espacio en blanco necesario, ignora el campo sin avisar de ello.