KornShell (ksh) código para anexos de envio com mailx e uuencode?
Pergunta
Eu preciso anexar um arquivo com mailx mas no momento eu não estou tendo sucesso.
Aqui está o meu 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
Qualquer comentário seria muito apreciado.
Atualizar Eu adicionei o var anexo para evitar ter que usar o caminho de cada vez.
Solução
Você tem que concat tanto o texto da sua mensagem eo anexo uuencoded:
$ 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"
Existem maneiras diferentes para fornecer o texto da mensagem, este é apenas um exemplo que está perto de sua pergunta original. Se a mensagem deve ser reutilizado faz sentido apenas armazená-lo em um arquivo e usar esse arquivo.
Outras dicas
Bem, aqui estão os primeiros problemas que você tem.
-
Você parece estar assumindo que um cliente de email está indo para lidar com apego uuencoded sem cabeçalhos. Isso não vai acontecer.
-
Você está abusando I / O redirecionamento:. Saída do uuencode e o aqui documento são ambos sendo alimentado para mailx, o que não pode acontecer
-
Você está abusando uuencode: se um caminho é dada, é apenas um nome para dar o arquivo decodificado, não um nome de arquivo de entrada. Dando o arquivo duas vezes irá atribuir o mesmo nome para o arquivo decodificado como o que foi lido. Os bandeira forças -m base64 codificação. Mas isso ainda não está indo para fornecer cabeçalhos de fixação para mailx.
Você é muito melhor obter uma cópia de mpack, que vai fazer o que quiser.
Se você deve fazê-lo, você poderia fazer algo parecido com isto:
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
Existem muitas outras possibilidades ... mas este ainda tem o documento aqui como no seu exemplo e foi fácil em cima da minha cabeça, e não há nenhum arquivo temporário envolvidos.