Come inviare un'e-mail dalla riga di comando?


29

Come inviare un'e-mail dalla riga di comando o dallo script? Voglio essere in grado di eseguire lo script a livello di codice passando il destinatario e il messaggio.


Se stai scrivendo un programma molte lingue hanno librerie che si occupano di e
user151019

Risposte:


22

mail -s subject someone@example.com digitare il messaggio, premere Ctrl+Dper terminare


11
Se non hai configurato il tuo sistema per dirgli dove inviare e-mail, probabilmente non invierà e-mail, si accumulerà sul mio Mac.
TJ Luoma,

15
-1: questa risposta è incompleta. A meno che il sistema non sia stato configurato prima di eseguire questo comando, come notato da @TJLuoma, questo comando non funzionerà.
melvynkim,

1
TJ Luoma e melvkim sono errati: un sistema OS X standard pronto all'uso invierà e-mail bene senza necessità di configurazione. La macchina OS X fungerà da proprio server SMTP, cercando DNS MX per il dominio di destinazione e inviando la posta lì.
John

2
@patrix, Corretto, utilizza il nome utente lungo dell'account di accesso e l'indirizzo ".local" auto-generato del Mac per formare un "Da". Lo uso sempre per e-mail di notifica a me e al mio staff da processi basati su shell. TJ Luoma e melvkim stavano dicendo che "non funzionerà" e "non inviare effettivamente e-mail", tuttavia, entrambi non sono corretti.
John,

1
@RamarajT, sì, è possibile reindirizzare l'output del comando echo alla posta e quindi non sarà necessario un Cmd-D. Ad esempio: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee,

26

Ci sono due programmi di cui sono a conoscenza che ti permetteranno facilmente di configurare il tuo Mac per inviare e-mail dalla riga di comando.

Ho scritto HOWTO per entrambi:

Dei due, suggerisco msmtp.

La configurazione è abbastanza complicata che non sono sicuro se dovrei replicare tutti i passaggi qui, ma menzionerò che se usi Homebrew puoi installare msmtp usando

brew install msmtp --with-macosx-keyring

Quindi il resto è solo una questione di impostazione dei relativi file di configurazione

Il primo è /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

Nota che la tls_trust_filelinea dovrebbe puntare a dove hai scaricato e installato i certificati da https://www.thawte.com/roots/index.html .

Ho inserito il mio in ~/Dropbox/Thawte Rootsmodo da poterlo avere su tutti i miei Mac.

Quindi è necessario un ~/.mailrcfile per dire dove si trova il binario msmtp. Se lo usi brew, /usr/local/bin/msmtpil file sarà simile al seguente:

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

L'ultimo ma cruciale passo è assicurarsi che il tuo Portachiavi abbia le informazioni esattamente nel formato che msmtp si aspetta:

Penso che copra la maggior parte dei dettagli. Vedi http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ se vuoi qualche dettaglio in più.


Ovviamente i miei esempi nello script sopra presuppongono che tu stia utilizzando Gmail, ma può essere utilizzato anche per altri server. Passa example@gmail.comal tuo indirizzo email Gmail o Google Apps.
TJ Luoma,

Sono stato finalmente in grado di farlo funzionare utilizzando le radici di Google disponibili qui: pki.google.com/roots.pem . Se sei bloccato su problemi con il file di fiducia e Gmail, questo potrebbe sbloccarti.
codewise

Se riscontri problemi con la posizione del file di configurazione (msmtprc), dopo l'installazione con Homebrew su macOS 10.13.3, msmtp lo ha cercato nella mia directory home: ~/.msmtprc
codewise,

15

Il modo più semplice per inviare la posta è attraverso una sessione telnet con il server smtp del proprio provider / rete. Dopo aver contattato il server e dopo ogni comando, il server risponderà se accetta il comando con qualcosa come "250 OK" o se non con un messaggio di errore.

Tutti i dettagli sono disponibili in RFC2821 - Simple Mail Transfer Protocol, Google. Questo modo di base è ottimo per verificare perché qualcosa non va nell'invio della posta, ma penso che sia abbastanza complicato scriverne la prova completa.

Innanzitutto ottenere un'interfaccia della riga di comando sul computer, avviando Terminal. Quindi continua con i seguenti comandi, uno dopo l'altro.

Aprire una sessione telnet sulla porta 25 del server smtp del proprio provider / rete

telnet name_or_ip_of_smtp_server 25

saluta più il nome internet del tuo provider / rete, come abc.com

EHLO name_of_your_network

è necessario un indirizzo from = return, <e> fanno parte del comando

MAIL FROM:<your_email_adress>

dare una o più destinazioni, <e> fanno parte del comando

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

dire al server che si desidera iniziare a inviare dati

DATA

ora il server dovrebbe rispondere è possibile iniziare a inviare la posta e passare in modalità dati

your data
more data
etc

ora finisci i dati con un punto come solo carattere su una linea

.

il server torna in modalità comando in modo da poter uscire

QUIT

13

Questo ha funzionato per me, è stato scritto pensando a Lion ma funziona per Mountain Lion. A proposito questo sta usando Gmail quindi se non sei ...

Non è necessario scaricare nulla! (basta configurare un account Gmail)

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

Configura Postfix per Gmail Modifica file SMTP /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

e aggiungere di seguito i relayhosts commentati: -

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

Genera sasl_password se non esiste già

sudo vim /etc/postfix/sasl_passwd

e inserisci quanto segue: -

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

Esegui i seguenti comandi

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 hai finito ....
Ora dovresti essere in grado di inviare e-mail dall'interno della riga di comando, ad es. Per inviare il contenuto di una directory come albero a un indirizzo e-mail

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

PS: Ho ottenuto che funzioni alla grande quando lo eseguivo manualmente dal Terminale o negli script. Tuttavia a questo punto sono bloccato dal problema che le e-mail non vengono mai inviate quando launchd avvia lo script. Immagino sia un problema con la configurazione del lavoro avviato.
Jonny


+1 Grazie per aver aggiunto questo. Mi ha davvero aiutato. Tutto ciò di cui avevo veramente bisogno era la voce relayhost in main.conf (è il mio server SMTP sulla mia LAN).
boot13,

3
Quanto sopra potrebbe non essere aggiornato. Ho dovuto aggiungere "smtp_sasl_mechanism_filter = plain" secondo stackoverflow.com/a/26451135/197789 per farlo funzionare. Altrimenti ho ricevuto un errore "errore generico".
Von


0

Potresti voler controllare postfixconf che abilita e configura OS X per inviare e-mail dalla riga di comando (usando il tuo input).

Si basa sulla configurazione postfix che è ben documentata sul web qui , qui e qui .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.