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.

Foi útil?

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.

  1. Você parece estar assumindo que um cliente de email está indo para lidar com apego uuencoded sem cabeçalhos. Isso não vai acontecer.

  2. 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

  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top