2 de Julio, 2007

Mandar un adjunto con mail(1), otra vez

Mira que es fácil, pero alguna vez me había pasado que al enviar un correo con mail(1), se me planteaba la necesidad de añadir un adjunto... y siempre tomaba la decisión equivocada: emplear base64. Y encima ya lo había explicado por aquí :(.

En realidad lo más sencillo es usar la codificación uuencode, que precisamente para eso está ;).

¿La diferencia? Resulta que la codificación base64 se usa integrada con MIME (que no es otra cosa que Multipurpose Internet Mail Extensions :D), mediante Content-Transfer-Encoding, pero los clientes de correo no suelen manejar bien un pegote en base64 en medio del cuerpo de un mensaje sin MIME (usando simplemente el formato descrito en el RFC822), y mail no soporta MIME.

Pero esto no ocurre con uuencode, ya que no hay previsión en MIME para usarlo, con lo que nos podemos encontrar un binario codificado dentro del cuerpo del mensaje en texto plano... y los MUA lo saben ;).

En realidad es muy fácil, y tan delante de las narices estaba, que no lo veía. Por ejemplo, hacemos un mail prueba@usuario.dom:

  1. Escribimos el correo normalmente, por ejemplo con $EDITOR (empleando ~v seguido de salto de linea en la entrada interactiva de mail.
  2. Si $EDITOR es vi (espero que sí :P), podemos ejecutar :re ! uuencode fichero_adjunto fichero_adjunto, y se leerá en el cuerpo del mensaje la salida de uuencode. El primer argumento es el nombre que tendrá en el adjuntoes y el segundo el fichero a adjuntar.
  3. Mandamos en correo normalmente (salimos de $EDITOR guardando el texto, e introducimos un punto seguido de salto de linea).

En el editor veremos algo como:

Hola,

Adjunto texto comprimido con gzip.

Un saludo.

Juanjo

begin 644 texto.txt.gz
M'XL("/W3B$8``W1E>'1O+G1X=``=S,L-@"`0A.'[5K$%$`KP8DSLP`J(3B(&
M=I''@>Y%+G/ZOSG`I245\-O`*%7'<!/&@YB"&NHLRM5C)-%US>RE(J-8:XFV
;XG]HIK[=.6Q`AUPZOU:B92?Z`-<(E2IE````
`
end

Y la mayoría de los MUA extraerán ese bloque y nos mostrarán un adjunto normal, de forma transparente.

Dependiendo de la versión de uuencode se podrá usar esta misma herramienta para extraer adjuntos de un fichero tipo mailbox o en formato RFC822, o puede que necesitemos uudecode; esto en caso de que nuestro MUA no procese bien el adjunto.

Por si a alguien le interesa, existe documentación sobre el algoritmo de uuencode, que está cubierto por el estándar POSIX.

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

Hay 2 comentarios

Gravatar

Yo cuando hacía pruebas para probar las cuotas del SMTP usaba mpack. Creo que lo provee el paquete mailx. No estoy seguro, o quizá sea un paquete aparte.

por Gura, en 2007-07-02 17:24:28

Gravatar

De entrada: muy buen blog. Felicidades :-)

Prueba nail:

echo "Adjunto presupuesto para arreglar su servidor estropeado" |nail -a presupuesto.pdf -s “Presupuesto” luser@somedomain.net

Salu2

Ivan

por Ivan, en 2007-07-05 02:22:24

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: