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 : : Restarted
esperado 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 mailx
como um alias para o mail
comando, 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 mail
os 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 mailx
estará em algum lugar como/usr/bin/mailx
Parece que ele tem opções diferentes para qualquer mail
comando 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
bash
removerá 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 mutt
ou 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]