Como eu crio um nome de arquivo para o meu anexo de e-mail?

1

Estou usando o Amazon Linux e estou criando um script bash. Estou tentando enviar um anexo por e-mail e estou tendo sucesso com

(cat $TFILE1; uuencode $output_file $output_file) | mailx -s "$subject" "$to_email"

No entanto, o problema que estou tendo é que o anexo está aparecendo (pelo menos no Gmail) com o nome "noname". Existe uma maneira de fazer o anexo aparecer com o mesmo nome da variável "$ output_file"?

    
por Dave 15.05.2017 / 22:56

3 respostas

1

Percebi que mail / mailx tem problemas com anexos. Tente usar mutt , ele lida com anexos muito bem e deve manter o nome do arquivo intacto.

mutt -a "$attachment_file" -s "$subject" -- "$to_email" < "$TFILE1"

em que "$TFILE1" é o corpo da mensagem de correio. Substitua-o por /dev/null se tudo o que você deseja enviar é o anexo.

    
por 16.05.2017 / 08:57
0

mpack define o nome do anexo como igual ao nome do arquivo de entrada. Assim, por exemplo ( -a para anexo em vez de inline; -s para definir o assunto; -c para definir o tipo MIME; 1.png é o arquivo a ser anexado; anthony@localhost é o endereço de e-mail a ser enviado ):

mpack -a -s 'test mpack' -c image/png 1.png anthony@localhost

envia-me um email com 1.png anexado, com um nome de arquivo:

Content-Type: image/png; name="1.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="1.png"
Content-MD5: EGqHjkvvXXcaO+41lBN2uA==

Você só precisa nomear o arquivo corretamente e usar mpack .

Outra opção, se você quiser ter controle total sobre a mensagem, é mime-construct .

    
por 16.05.2017 / 18:23
0

uuencode é um remanescente do início dos anos 90 e deve ser evitado em favor de ferramentas MIME adequadas, se possível.

Infelizmente, ainda não existe um utilitário de linha de comando Unix simples para enviar mensagens MIME, embora mutt chegue perto (mas ainda é basicamente um programa interativo, e portanto inclui um quantidade de inchaço, se tudo que você precisa é enviar uma mensagem ao seu MTA de um script).

Com modernas linguagens de script, uma ferramenta para enviar uma mensagem multipartes com uma parte do corpo de texto in-line com um anexo binário é apenas algumas linhas de código. No shell script, o código é um pouco mais volumoso; mas o verdadeiro desafio é, muitas vezes, saber o suficiente sobre o MIME para poder executá-lo corretamente. Resumidamente, você precisa entender a estrutura geral de uma mensagem MIME e como codificar o tipo de parte do corpo que deseja usar.

( printf 'From: %s\nTo: %s\nSubject: %s\n' "$sender" "$recipient" "$subject"
   printf 'Mime-Version: 1.0\nContent-type: multipart/mixed; boundary="foooobar"\n'
   printf '\n--foooobar\n\n'
   cat "$TFILE1"
   printf '\n--foooobar\nContent-type: application/octet-stream; name="%s"\n' "${output_file##*/}"
   printf 'Content-transfer-encoding: base64\n\n'
   base64 "$output_file"
   printf '\n--foooobar--\n' ) |
sendmail -t

Isso deve funcionar para o texto básico US-ASCII de 7 bits; se você precisa de texto de 8 bits, especialmente nos cabeçalhos, há várias reviravoltas adicionais (RFC 2047 para texto legível por humanos, RFC 2231 para nomes de arquivos e semelhantes), no ponto em que você realmente deseja mudar para um linguagem que encapsula esses detalhes para que você não precise entendê-los ou se preocupar com eles.

Além da dependência de base64 e sendmail para o envio real, isso é puro e utilitários de shell muito básicos. A expansão de parâmetro ${output_file##*/} deve funcionar com os shells recentes para remover tudo através da barra final, embora se você estiver realmente em um antigo, talvez queira usar basename .

    
por 16.05.2017 / 19:02