Código KornShell (ksh) para enviar anexos com mailx e uuencode?

Eu preciso anexar um arquivo com mailx, mas no momento não estou tendo sucesso.

Aqui está o meu código:

subject="Something happened"
to="[email protected]"
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 feedback seria muito apreciado.


Update I have added the attachment var to avoid having to use the path every time.

0
adicionado editado
Visualizações: 2

2 Respostas

Você precisa concatenar o texto de sua mensagem e o anexo uuencoded:

$ subject="Something happened"
$ to="[email protected]"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt < 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 diferentes maneiras de fornecer o texto da mensagem, este é apenas um exemplo que está próximo à sua pergunta original. Se a mensagem deve ser reutilizada, faz sentido armazená-la em um arquivo e usar esse arquivo.

0
adicionado
Obrigado pela resposta! Então o msg.txt está sendo criado pelo EOF e depois reutilizado na última linha?
adicionado o autor Nano Taboada, fonte
Está jogando o seguinte erro: cat: não é possível abrir msg.txt
adicionado o autor Nano Taboada, fonte
Minha culpa! Eu espaçamos o gato> msg.txt << EOF
adicionado o autor Nano Taboada, fonte

Bem, aqui estão os primeiros problemas que você tem.

  1. Você parece estar assumindo que um cliente de e-mail lidará com anexos uuencoded sem cabeçalhos. Isso não vai acontecer.

  2. Você está usando indevidamente o redirecionamento de E/S: a saída do uuencode e o here-document estão sendo enviados para o mailx, o que não pode acontecer.

  3. Você está usando indevidamente o uuencode: se um caminho é dado, é apenas um nome para dar o arquivo decodificado, não um nome de arquivo de entrada. Dar o arquivo duas vezes atribuirá o mesmo nome ao arquivo decodificado daquele que foi lido. O sinalizador -m força a codificação base64. Mas isso ainda não fornecerá cabeçalhos de anexos para o mailx.

Você é muito melhor ter uma cópia do mpack, que fará o que você quiser.

Se você precisa fazer isso, você pode fazer algo assim:

cat <

Existem muitas outras possibilidades ... mas esta ainda tem o documento aqui como no seu exemplo e foi fácil fora do topo da minha cabeça, e não há nenhum arquivo temporário envolvido.

0
adicionado
Muito obrigado! Sim, eu vi o mutt que pode fazer anexos simples, mas como não sou root nessa caixa, eu tenho que lidar com qualquer hack mailx.
adicionado o autor Nano Taboada, fonte
Estou tendo o seguinte erro: uuencode: opção ilegal - m Uso: uuencode [infile] remotefile
adicionado o autor Nano Taboada, fonte
Você tem uma versão mais antiga do uuencode, antes de fornecer a codificação base64 ... você ainda pode obter o mpack e compilá-lo para uso localmente em sua conta ... é o que eu provavelmente faria.
adicionado o autor Thomas Kammeyer, fonte