Como posso enviar um anexo por email a partir da linha de comando

26

É possível enviar anexos por email a partir da linha de comando?

Se possível, eu gostaria de algo tão simples como:

mail -a myfile.txt -t [email protected] -s "Here's my file"
Conorgriffin
fonte
1
O agente do usuário de email da linha de comando do ubuntu padrão mail(aka mailx) é MIME ignorante, portanto, não pode manipular anexos de nenhuma maneira que não seja da década de 1980. Esta é uma boa pergunta, estou procurando a Canonical MUA canônica; mais por vir.
msw

Respostas:

18

De todos os agentes de usuários de email no repositório Ubuntu, parece que mutt é o MUA da linha de comando que é abençoado com o Suporte a Longo Prazo.

De acordo com o manual , você pode fazer algo exatamente como:

mutt -a myfile.txt -s "Here's my file" -- [email protected]

exceto que não irá a lugar algum, pois também é necessário um Agente de Transferência de Correio. Os mais populares são:

  • o venerável sendmail
  • postfix
  • exim4
  • qmail
  • nullmailer

e os únicos que a Canonical parece apoiar são o postfix (obrigado pela correção Steve) e o exim4 .

Pode-se dizer também que o xdg-email também é um Ubuntu MUA adequado, mas é um front-end básico que executa apenas o seu MUA preferido em seu nome.

Se você deseja aconselhamento sobre qual MTA pode ser adequado para seu uso, talvez abra outra pergunta aqui.

msw
fonte
Ótima pergunta, obrigado. Você me solicitou que as correspondências funcionassem na minha caixa. Usei o nullmailer MTA para retransmitir cegamente para o meu ISP, e o muttcomando de exemplo funcionou como anunciado. Aliás, o nullmailer possui um front-end falso do sendmail, para que a maioria dos programas que esperam conversar com o sendmail seja transferida para um MTA real, sem o meu esforço.
msw
msw, não sei bem por que você está afirmando que o exim4 é o único suporte canônico, o postfix também é o principal e é o que é ativado se você selecionar a seleção de tarefas do servidor de email na instalação do ubuntu-server. Eu acredito que o exim4 é o MTA padrão do debian e, no passado, as preferências de empacotamento podem ter sido puxadas por padrão, mas, por um tempo, o postfix é definitivamente o MTA preferido no Ubuntu.
Steve Beattie
Ah, e observe também que, se você optou pelo bsd mail / mailx como seu MUA (que não reconhece o mime), ainda precisaria de algum tipo de MTA para realmente enviar o e-mail. Mas vira-lata é melhor para você de qualquer maneira. :-)
Steve Beattie
11

Também tive problemas com o envio de arquivos anexos. Quando enviei um email sem anexo, ele foi bem-sucedido, mas não foi anexado. Este problema foi existente com sendemail, mutt, mail, mailx, uuencodecomandos.

Felizmente, foi resolvido engraçado. Eu uso o Gmail para enviar e-mail. Você pode configurar seu gmail para enviar e-mails através de comandos no terminal, conforme declarado em http://www.linuxandlife.com/2013/01/send-email-from-linux-terminal.html .

Você pode enviar um email de texto usando:

mail -s "hello" [email protected] < /home/masoud/YOURFILE.txt 

mas você não pode enviar o mesmo arquivo como anexo como abaixo:

mail -s "hello" [email protected] -a /home/masoud/YOURFILE.txt

ou:

mail -s "hello" -a /home/masoud/YOURFILE.txt [email protected]

Por fim, entendi que apenas esse formato poderia enviar um anexo:

echo "your message here" | mail -s "title" -a /home/masoud/YOURFILE.txt [email protected]

Curiosamente, a diferença é a existência do comando "eco".

Atualização: 201808

Parece que a -aopção foi alterada com Maiúsculas -A para anexo agora. A -aparece ser para mudar travessa de acordo com doc

Masoud
fonte
Excelente! Obrigado. Eu estava tentando enviar meu .zshrcarquivo para alguém e, embora eu use mailmuito para enviar mensagens rápidas, tentar enviar um anexo não estava funcionando. Eu só precisava de confirmação de que era possível perceber que a ordem dos argumentos é muito importante. Isso funcionou para mim: mail -s "zshrc" -a ~/.zshrc [email protected]... é claro, eu ainda precisava digitar o corpo da mensagem e pressionar ctrl+da última linha em branco.
Karl Wilbur
O uso de mail [email protected] -a ~/.zshrc"funcionou", pois enviou a mensagem, mas não enviou o arquivo. Se eu tivesse tentado mail [email protected] -a ~/.zshrc -s 'zshrc', seria óbvio que os parâmetros após o endereço do destinatário estavam sendo ignorados.
Karl Wilbur
@Masoud lnk está quebrado ... queria atualizá-lo, mas você sabe melhor o que documentação que desde então eu deixá-lo a você
Philippe Gachoud
6

Descobri que o comando e os parâmetros foram alterados recentemente.

Se você deseja enviar seus anexos com este comando:

mail -s "your subject" [email protected] -A /your/attachment/absolute/path < /home/you/message.txt

A opção attachmentdeve ser -Aqual é CAPITAL A.

Alex
fonte
3

Você pode enviar um arquivo do shell , mas use o Thunderbird .

Nesse caso, o try thunderbird -remote ...é útil - assumindo que o thunderbird esteja em execução:

O comando abre uma janela de composição de email de uma instância do thunderbird em execução.
O endereço "De" é o endereço padrão configurado no Thunderbird.
Além disso, as configurações da conta existentes são usadas, não é necessária nenhuma configuração separada.

Para um email endereçado a [email protected], com assunto "S", corpo "B" e um anexo /some/absolute/file.txt, o comando é

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='[email protected]',body='B',attachment='/some/absolute/file.txt')"

Existem dois problemas:

O arquivo anexado precisa ser fornecido por um caminho absoluto , o que é tedioso na prática. Isso pode ser manipulado usando-se readlink -fpara resolver caminhos relativos:

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='[email protected]',body='B',attachment='$(readlink -f file.txt)')"

Além disso, o comando é longo. Use um script de shell ou função de shell, com quatro argumentos:

thunderbird-compose () {
    thunderbird -remote "xfeDoCommand(composeMessage,subject='$1',to='$2',body='$3',attachment='$(readlink -f $4)')"
}

Com esta função, o comando fica legível:

thunderbird-compose 'Some Subject' [email protected] 'Body of message' file1

abrirá uma janela "Write" do thunderbird com o anexo e o texto De, Para, Assunto e corpo preenchidos. Ele pode ser editado antes de enviá-lo.

Volker Siegel
fonte
2

heirloom-mailxO pacote no debian fornece o mailxcomando para enviar anexos mime facilmente. seguintes trabalhos para mim;

 mailx -a attachment.zip -s subject [email protected]
Furkan Mustafa
fonte
1
Esta era a peça que faltava; o maile mailxincluído no RH-alikes tem -apara anexos de arquivos, mas o incluído no Debian-alikes não.
DopeGhoti 14/04
0

Desejo adicionar outra resposta que é usada para adicionar o texto do corpo junto com o anexo. Felicidades!!

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
Anandu M Das
fonte