É 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"
É 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"
Respostas:
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:
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.
mutt
comando 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.
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
, uuencode
comandos.
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".
Parece que a -a
opção foi alterada com Maiúsculas -A
para anexo agora. A -a
parece ser para mudar travessa de acordo com doc
.zshrc
arquivo para alguém e, embora eu use mail
muito 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+d
a última linha em branco.
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.
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 -f
para 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.
heirloom-mailx
O pacote no debian fornece o mailx
comando para enviar anexos mime facilmente. seguintes trabalhos para mim;
mailx -a attachment.zip -s subject rctp@domain.to
mail
e mailx
incluído no RH-alikes tem -a
para anexos de arquivos, mas o incluído no Debian-alikes não.
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
mail
(akamailx
) é 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.