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.

¿Fue útil?

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.

  1. Parece estar asumiendo que un cliente de correo manejará archivos adjuntos codificados sin encabezados.Eso no sucederá.

  2. 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.

  3. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top