Como enviar um email a partir da linha de comando?


29

Como enviar um email a partir da linha de comando ou script? Quero poder executar o script programaticamente passando o receptor e a mensagem.


Se você está escrevendo um programa, muitos idiomas têm bibliotecas que lidam com email
user151019

Respostas:


22

mail -s subject someone@example.com digite sua mensagem, pressione Ctrl+Dpara finalizar


11
Se você não configurou o sistema para dizer para onde enviar e-mail, provavelmente isso não será realmente enviado, ele apenas se acumulará no meu Mac.
TJ Luoma

15
-1: esta resposta está incompleta. A menos que o sistema tenha sido configurado antes da execução deste comando, como observou o @TJLuoma, esse comando não funcionará.
melvynkim

1
TJ Luoma e melvkim estão incorretos: um sistema OS X padrão pronto para uso enviará um e-mail muito bem sem a necessidade de configuração. A máquina OS X atuará como seu próprio servidor SMTP, pesquisando o DNS MX para o domínio de destino e enviando o correio para lá.
precisa saber é

2
@patrix, Correto, ele usa o nome de usuário longo da conta logada e o endereço ".local" auto-gerado do Mac para formar um "De". Eu o uso o tempo todo para enviar e-mails de notificação para mim e minha equipe a partir de processos com script de shell. TJ Luoma e melvkim estavam dizendo que "não funcionará" e "realmente não enviará email", no entanto, ambos estão incorretos.
precisa saber é o seguinte

1
@ RamarajT, sim, você pode canalizar a saída do comando echo para o correio, e não será necessário um Cmd-D. Por exemplo: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

Estou ciente de dois programas que permitirão que você configure facilmente o seu Mac para enviar e-mails a partir da linha de comando.

Eu escrevi HOWTOs para os dois:

Dos dois, eu sugiro msmtp.

A configuração é bastante complicada e não tenho certeza se devo replicar todas as etapas aqui, mas mencionarei que, se você usar o Homebrew, poderá instalar o msmtp usando

brew install msmtp --with-macosx-keyring

O restante é apenas uma questão de configurar os arquivos de configuração relacionados

O primeiro é /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

Observe que a tls_trust_filelinha deve apontar para onde você baixou e instalou os certificados em https://www.thawte.com/roots/index.html .

Coloquei o meu ~/Dropbox/Thawte Rootspara poder usá- lo em todos os meus Macs.

Então você precisa de um ~/.mailrcarquivo para dizer onde o binário msmtp está localizado. Se você usá brew- /usr/local/bin/msmtplo, o arquivo ficará assim:

set sendmail="/usr/local/bin/msmtp"

O último passo, porém crucial, é garantir que o seu Keychain tenha as informações exatamente no formato que o msmtp espera:

Eu acho que isso cobre a maioria dos detalhes. Consulte http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ se desejar mais alguns detalhes.


Obviamente, meus exemplos no script acima supõem que você esteja usando o Gmail, mas ele também pode ser usado para outros servidores. Mude example@gmail.compara o seu endereço de e-mail do Gmail ou do Google Apps.
TJ Luoma

Finalmente, consegui fazer isso funcionar usando o Google Roots disponível aqui: pki.google.com/roots.pem . Se você estiver com problemas no arquivo confiável e no Gmail, isso poderá desbloqueá-lo.
codewise 22/03

Se você está tendo problemas com o local do arquivo config (msmtprc), após a instalação com o Homebrew no macOS 10.13.3, o msmtp procurou no meu diretório pessoal: ~/.msmtprc
codewise

15

A maneira mais básica de enviar email é através de uma sessão de telnet com o servidor smtp do seu provedor / rede. Depois de entrar em contato com o servidor e após cada comando, o servidor responderá se aceitar o comando com algo como "250 OK" ou se não estiver com uma mensagem de erro.

Todos os detalhes podem ser encontrados no RFC2821 - Simple Mail Transfer Protocol, do Google. Essa maneira básica é ótima para testar por que algo dá errado no envio de mensagens, mas acho que é bastante complicado criar um script completo.

Primeiro, obtenha uma interface de linha de comando no seu computador, iniciando o Terminal. Continue com os seguintes comandos, um após um.

Abra uma sessão de telnet para a porta 25 do servidor smtp do seu provedor / rede

telnet name_or_ip_of_smtp_server 25

diga olá mais o nome da Internet do seu provedor / rede, como abc.com

EHLO name_of_your_network

é necessário um endereço from = return, <e> fazem parte do comando

MAIL FROM:<your_email_adress>

fornecer um ou mais destinos, os <e> fazem parte do comando

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

diga ao servidor que você deseja começar a enviar dados

DATA

agora o servidor deve responder, você pode começar a enviar seu e-mail e entrar no modo de dados

your data
more data
etc

agora termine os dados com um ponto, como apenas caracteres em uma linha

.

o servidor volta ao modo de comando para que você possa sair

QUIT

13

Isso funcionou para mim, foi escrito com o Lion em mente, mas funciona para o Mountain Lion. Btw isso está usando o Gmail, então se você não estiver ...

Você não precisa baixar nada! (basta configurar uma conta do Gmail)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Configurar o Postfix para o arquivo de edição SMTP do Gmail /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

e adicione o seguinte abaixo os relayhosts comentados: -

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

Gere sasl_password se ainda não existir

sudo vim /etc/postfix/sasl_passwd

e digite o seguinte: -

[smtp.gmail.com]:587 username@gmail.com:password

Execute os seguintes comandos

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

E você terminou.
Agora, você poderá enviar e-mails de dentro da linha de comando, por exemplo, para enviar o conteúdo de um diretório como uma árvore para um endereço de e-mail

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

PS: Consegui que isso funcionasse muito bem ao executar isso manualmente no Terminal ou em scripts. No entanto, neste momento, estou com o problema de que os e-mails nunca são enviados quando o launchd inicia o script. Eu acho que é um problema com a configuração do trabalho launchd.
21913 Jonny


+1 Obrigado por adicionar isso. Realmente me ajudou. Tudo o que eu realmente precisava era da entrada relayhost no main.conf (é meu próprio servidor SMTP na minha LAN).
boot13

3
O acima pode estar desatualizado. Eu tive que adicionar "smtp_sasl_mechanism_filter = plain" conforme stackoverflow.com/a/26451135/197789 para fazê-lo funcionar. Caso contrário, recebi um erro de "falha genérica".
Von


0

Você pode verificar o postfixconf que habilita e configura o OS X para enviar e-mails a partir da linha de comando (usando sua entrada).

É baseado na configuração do postfix que está bem documentada na web aqui , aqui e aqui .


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.