¿Código KornShell (ksh) para enviar archivos adjuntos con mailx y uuencode?
Pregunta
Necesito adjuntar un archivo con mailx pero de momento no tengo éxito.
Aquí está mi código:
subject="Something happened"
to="somebody@somewhere.com"
body="Attachment Test"
attachment=/path/to/somefile.csv
uuencode $attachment | mailx -s "$subject" "$to" << EOF
The message is ready to be sent with the following file or link attachments:
somefile.csv
Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments. Check your
e-mail security settings to determine how attachments are handled.
EOF
Cualquier comentario será muy apreciado.
ActualizarAgregué la var adjunta para evitar tener que usar la ruta cada vez.
Solución
Tienes que concatenar tanto el texto de tu mensaje como el archivo adjunto codificado sin formato:
$ subject="Something happened"
$ to="somebody@somewhere.com"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments. Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"
Hay diferentes formas de proporcionar el texto del mensaje; este es solo un ejemplo cercano a su pregunta original.Si el mensaje debe reutilizarse, tiene sentido simplemente almacenarlo en un archivo y utilizarlo.
Otros consejos
Bueno, aquí están los primeros problemas que tienes.
Parece estar asumiendo que un cliente de correo manejará archivos adjuntos codificados sin encabezados.Eso no sucederá.
Estás haciendo un mal uso de la redirección de E/S:La salida de uuencode y el documento aquí se envían a mailx, lo que no puede suceder.
Estás haciendo un mal uso de uuencode:si se proporciona una ruta, es solo un nombre para darle al archivo decodificado, no un nombre de archivo de entrada.Dar el archivo dos veces asignará al archivo decodificado el mismo nombre que el que se leyó.El indicador -m fuerza la codificación base64.Pero esto todavía no proporcionará encabezados adjuntos para mailx.
Es mucho mejor que consigas una copia de mpack, que hará lo que quieras.
Si debes hacerlo, podrías hacer algo como esto:
cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to"
place your message from the here block in your example here
EOF
Hay muchas otras posibilidades...Pero este todavía tiene el documento aquí como en su ejemplo y fue fácil de ser la cabeza, y no hay un archivo temporal involucrado.