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 me@example.com -s "Here's my file"

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" -- me@example.com

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.


Ó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" RECEIVE@mail.com < /home/masoud/YOURFILE.txt 

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

mail -s "hello" RECEIVE@mail.com -a /home/masoud/YOURFILE.txt

ou:

mail -s "hello" -a /home/masoud/YOURFILE.txt RECEIVE@mail.com

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

echo "your message here" | mail -s "title" -a /home/masoud/YOURFILE.txt RECEIVE@mail.com

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


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 username@example.com... é claro, eu ainda precisava digitar o corpo da mensagem e pressionar ctrl+da última linha em branco.
Karl Wilbur

O uso de mail username@example.com -a ~/.zshrc"funcionou", pois enviou a mensagem, mas não enviou o arquivo. Se eu tivesse tentado mail username@example.com -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" you@gmail.com -A /your/attachment/absolute/path < /home/you/message.txt

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


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 you@example.com, com assunto "S", corpo "B" e um anexo /some/absolute/file.txt, o comando é

thunderbird -remote "xfeDoCommand(composeMessage,subject='S',to='you@example.com',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='you@example.com',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' test@example.com '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.


2

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

 mailx -a attachment.zip -s subject rctp@domain.to

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" -- recipient@domain.com
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.