'mail' não funciona no Script da mesma forma que funciona na linha de comando

'mail' não funciona no Script da mesma forma que funciona na linha de comando

A linha de código/comando abaixo está funcionando conforme o esperado se eu executá-lo no terminal Unix, mas não se eu incluí-lo em um script e executar o script - exatamente o mesmo.

Espero que o X-Priority mostre o e-mail como alta prioridade no Outlook. Se eu executá-lo na linha de comando, vejo que o e-mail está sendo exibido corretamente como alta prioridade e vejo que o arquivo está anexado e o corpo aparece como deveria. No entanto, se eu escrever um script de shell e executar o script, o e-mail será formatado como texto e o anexo será anexado ao corpo do e-mail e o e-mail será mostrado normalmente no Outlook.

Não tenho certeza do que estou fazendo de errado. Qualquer ajuda é apreciada.

Script 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]"

Também testado com 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]"

Linha 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: Mais detalhes/observações sobre mais P&D:

No Assunto, no meu comando real, há uma atribuição de variável como MyApp : ${HostName} : Restarted\nX-Priority: 1. HostNameé uma variável que defini no script. Se eu substituir o valor codificado da variável como MyApp : myserver : Restarted\nX-Priority: 1, a linha de comando e o script se comportarão exatamente da mesma forma. Se eu mantiver a variável em linha de comando, ela funciona como esperado (a parte X-Priority) mas o assunto vem como MyApp : : Restartedesperado pois a variável não está definida.

Tentei adicionar uma variável indefinida no script e ainda não funcionou.

Espero que isso forneça mais informações sobre o problema.


Nota: originalmente fiz esta pergunta no stackoverflow. Mas fui aconselhado a perguntar aqui -https://stackoverflow.com/questions/75585298/mail-not-working-in-script-same-way-it-is-working-from-command-line

--

Responder1

Qual sistema operacional/distro você está usando?

Muitas distros normalmente usam BSD mailxcomo um alias para o mailcomando, mas pode haver uma alternativa ou quando seu script é executado, ele tem um PATH diferente e, portanto, usa um programa diferente daquele que você espera. (Como talvez o seu sistema operacional tenha outras idéias sobre o que mailos usuários devem fazer.)

Experimente no seu terminal:

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

Então faça o mesmo no seu script para ver se há algo diferente no PATHS

O BSD mailxestará em algum lugar como/usr/bin/mailx

Parece que ele tem opções diferentes para qualquer mailcomando que você esteja usando. (Ver man mailx/ man mail). Você está tentando obter:

Subject: Message Subject 
  X-Priority: 1

Ou o assunto e um cabeçalho adicional:

Subject: Message Subject
X-Priority: 1

bashremoverá novas linhas das variáveis ​​se você tentar usá-las dessa forma para invocar outro comando.

Se é mailx:

  • -aEspecificamoscampos de cabeçalho adicionaisna linha de comando, como "X-Loop: foo@bar" etc.

Eu tentaria 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]

Eu não acho que exista uma maneira (fácil) de fazer com que o stock mail/mailx adicione anexos. Não é algo que possa fazer.

Você poderia usar uma alternativa como muttou 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 fará mais parecido com o que você deseja de qualquer maneira.

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]

informação relacionada