'correo' no funciona en Script de la misma manera que funciona desde la línea de comando

'correo' no funciona en Script de la misma manera que funciona desde la línea de comando

La siguiente línea de código/comando funciona como se esperaba si la ejecuto desde una terminal Unix, pero no si la incluyo en un script y lo ejecuto, exactamente igual.

Espero que X-Priority muestre el correo como de alta prioridad en Outlook. Si lo ejecuto desde la línea de comando, veo que el correo electrónico se muestra correctamente como de alta prioridad y veo que el archivo está adjunto y el cuerpo aparece como se supone. Sin embargo, si escribo un script de shell y lo ejecuto, el correo viene formateado como texto y el archivo adjunto se agrega al cuerpo del correo electrónico y el correo electrónico se muestra normalmente en Outlook.

No estoy seguro de qué estoy haciendo mal. Se agradece cualquier ayuda.

Guión de shell

#!/bin/sh
echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

También probado con Shell Script

#!/bin/bash
echo "Message Body" | /usr/bin/mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

Línea de comando

echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

EDITAR: Más detalles/observación sobre más investigación y desarrollo:

En Asunto, en mi comando real, hay una asignación de variable como MyApp : ${HostName} : Restarted\nX-Priority: 1. HostNamees una variable que definí en el script. Si reemplazo el valor codificado de la variable como MyApp : myserver : Restarted\nX-Priority: 1, la línea de comando y el script se comportan exactamente igual. Si mantengo la variable en la línea de comando, funciona como se esperaba (la parte X-Priority) pero el tema aparece como MyApp : : Restartedse esperaba ya que la variable no está definida.

Intenté agregar una variable indefinida en el script y todavía no funcionó.

Espero que esto brinde más información sobre el problema.


Nota: originalmente hice esta pregunta en stackoverflow. Pero me aconsejaron que lo preguntara aquí.https://stackoverflow.com/questions/75585298/mail-not-working-in-script-same-way-it-is-working-from-command-line

--

Respuesta1

¿Qué sistema operativo/distro estás usando?

Muchas distribuciones suelen utilizar BSD mailxcomo alias del mailcomando, pero puede haber una alternativa o, cuando se ejecuta el script, tiene una RUTA diferente y, por lo tanto, utiliza un programa diferente al esperado. (Como quizás su sistema operativo tenga otras ideas sobre lo que maildeberían hacer los usuarios).

Prueba desde tu terminal:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Luego lo mismo en tu script para ver si hay algo diferente en los PATHS

BSD mailxestará en algún lugar como/usr/bin/mailx

Sin embargo , parece que tiene diferentes opciones para cualquier mailcomando que estés usando. (Ver man mailx/ man mail). ¿Estás intentando conseguir:

Subject: Message Subject 
  X-Priority: 1

O el asunto, luego un encabezado adicional:

Subject: Message Subject
X-Priority: 1

basheliminará las nuevas líneas de las variables si intenta usarlas así para invocar otro comando.

Si es mailx:

  • -aEspecificarcampos de encabezado adicionalesen la línea de comando como "X-Loop: foo@bar", etc.

Probaría algo como:

#!/bin/bash
echo "Message Body" | /usr/bin/mailx -a "X-Priority: 1" -s "Message Subject" -r [email protected] -c [email protected] -- [email protected]

Sin embargo, no creo que haya una manera (fácil) de hacer que el correo/mailx estándar agregue archivos adjuntos. No es algo que pueda hacer.

Podrías usar una alternativa como mutto neomutt:

options:

  --            Special argument forces NeoMutt to stop option parsing and treat
                remaining arguments as addresses even if they start with a dash

  -a <file>     Attach one or more files to a message (must be the last option)
                Add any addresses after the '--' argument

  -c <address>  Specify a carbon copy (Cc) recipient

  -s <subject>  Specify a subject (must be enclosed in quotes if it has spaces)


Parece que de todos modos se parecerá más a lo que quieres.

echo "Message Body" | mutt -s "Message Subject" \ 
-e "my_hdr X-Priority: 1" \
-e "my_hdr From: [email protected]" \ 
-c [email protected] \
-a /path/to/logFile.log \
-- [email protected]


echo "Message Body" | mutt -s "Message Subject" -e "my_hdr X-Priority: 1" -e "my_hdr From: [email protected]" -c [email protected] -a /path/to/logFile.log -- [email protected]

información relacionada