¿Cómo creo un nombre de file para mi file adjunto de correo electrónico?

Estoy usando Amazon Linux y estoy creando un script bash. Estoy tratando de enviar un file adjunto por correo electrónico y estoy teniendo éxito con

(cat $TFILE1; uuencode $output_file $output_file) | mailx -s "$subject" "$to_email" 

Sin embargo, el problema que estoy teniendo es que el file adjunto se muestra (al less en Gmail) con el nombre "noname". ¿Hay alguna manera de hacer que el file adjunto aparezca con el mismo nombre que la variable "$ output_file"?

Me di count de que mail / mailx tiene problemas con los files adjuntos. Trate de usar mutt lugar, maneja los files adjuntos muy bien y debe mantener el nombre de file intacto.

 mutt -a "$attachment_file" -s "$subject" -- "$to_email" < "$TFILE1" 

donde "$TFILE1" es el cuerpo del post de correo. Reemplácelo con /dev/null si lo único que desea enviar es el file adjunto.

mpack establece el nombre del file adjunto igual al nombre del file de input. Entonces, por ejemplo ( -a para datos adjuntos en lugar de en línea; -s para establecer el asunto; -c para establecer el tipo MIME; 1.png es el file para adjuntar; anthony@localhost es la dirección de correo electrónico a enviar):

 mpack -a -s 'test mpack' -c image/png 1.png anthony@localhost 

me envía un correo electrónico con 1.png adjunto, con un nombre de file:

 Content-Type: image/png; name="1.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="1.png" Content-MD5: EGqHjkvvXXcaO+41lBN2uA== 

Entonces solo necesita nombrar su file correctamente, luego use mpack .

Otra opción, si desea un control total sobre el post, es mime-construct .

uuencode es un remanente de principios de la década de 1990 y debe evitarse a favor de herramientas MIME adecuadas si es posible.

Desafortunadamente, todavía no hay una utilidad de command-line simple de facto de Unix para enviar posts MIME, aunque mutt se acerca (pero sigue siendo principalmente un progtwig interactivo, y por lo tanto incluye una buena cantidad de inflado si todo lo que necesita es enviar un post a su MTA desde un script).

Con los lenguajes de scripting modernos, una herramienta para enviar un post de varias partes con una parte de cuerpo de text en línea con un file adjunto binary es solo unas pocas líneas de código. En el script de shell desnudo, el código es un poco más voluminoso; pero el verdadero desafío a menudo es conocer lo suficiente sobre MIME para poder llevarlo a cabo correctamente. En resumen, debe comprender la estructura general de un post MIME y cómo codificar el tipo de parte del cuerpo que desea usar.

 ( printf 'From: %s\nTo: %s\nSubject: %s\n' "$sender" "$recipient" "$subject" printf 'Mime-Version: 1.0\nContent-type: multipart/mixed; boundary="foooobar"\n' printf '\n--foooobar\n\n' cat "$TFILE1" printf '\n--foooobar\nContent-type: application/octet-stream; name="%s"\n' "${output_file##*/}" printf 'Content-transfer-encoding: base64\n\n' base64 "$output_file" printf '\n--foooobar--\n' ) | sendmail -t 

Esto debería funcionar para text básico US-ASCII de 7 bits; si necesita text de 8 bits, especialmente en los encabezados, hay una serie de giros adicionales (RFC 2047 para text legible por humanos, RFC 2231 para nombres de file y similares) en cuyo punto realmente querrá cambiar a un lenguaje que encapsula estos detalles para que no tenga que entenderlos o preocuparse por ellos.

Además de la dependencia de base64 y sendmail para el envío real, se trata de utilidades internas y básicas muy simples. La expansión de parameters ${output_file##*/} debería funcionar con shells recientes para eliminar todo a través de la barra inclinada final, aunque si está en una muy antigua, es posible que desee usar el basename lugar.

    Intereting Posts