Che tu sia uno sviluppatore che lavora ininterrottamente nella riga di comando di Linux o un amministratore del server che vuole registri o altri dati estratti dai sistemi amministrati, sapere come inviare e-mail dalla riga di comando è molto utile.
In questo post, troverete esempi di come inviare e-mail dal terminale. Esamineremo le configurazioni personalizzate e toccheremo come impostare le connessioni SMTP agli account di posta elettronica o ai fornitori di servizi di posta elettronica., Ti mostrerò come installare i pacchetti di mailer della console necessari e fornire lo sfondo per le opzioni della riga di comando in base ai manuali del pacchetto.
Impostazione dei pacchetti Mailer da riga di comando
Tutti i pacchetti mailer presenti nel tutorial sono disponibili attraverso il Gestore avanzato dei pacchetti di Debian, quindi i passaggi di installazione nell’esempio seguente possono essere usati per tutti i pacchetti presentati.,
Si noti che questi software possono essere installati da altri gestori di pacchetti predefiniti comeyum
odnf
a seconda della distribuzione del sistema Linux.
Nella maggior parte dei casi, sendmail
o postfix
è disponibile in ogni distribuzione Linux out-of-the-box o almeno questo è ciò che dicono post di blog simili. O sono sfortunato o gli altri si sbagliavano, ma ho dovuto installarne uno manualmente. Tuttavia, è sicuramente bisogno di uno di loro per la consegna e-mail.,
Impostazione di Sendmail con il pacchetto SSMTP
Continuerò consendmail
e il pacchetto SSMTP. SSMTP contiene il pacchettosendmail
sotto il cofano come vedrai e facilita la configurazione, che è piuttosto difficile persendmail
altrimenti.
Passaggio 1., Controllare se la Linea di Comando Mailer Pacchetto è Installato
Digitare il mailer nome del pacchetto nel modo in cui si esegue il comando, per verificare se è disponibile:
-
Se il pacchetto è installato, il comando viene eseguito, e il prompt cambia — durante il tentativo di eseguire il comando e vedrete un cursore lampeggiante seguito dal messaggio
Recipient names must be specified
nel caso disendmail
. Conclusione: il pacchetto è installato., -
Se il pacchetto NON è installato, riceverai un messaggio di avviso e un suggerimento su come installarlo:
In questo esempio, ho provato se il comando sendmail
funziona. Dopo aver aggiunto il pacchetto SSMTP, questo comando e il comando ssmtp
funzioneranno e cambieranno il prompt dei comandi nel terminale. Diamo un’occhiata a questo!
Passaggio 2., Installazione di Sendmail Command Line Mailer Package
Come suggerito dall’output del terminale, dobbiamo eseguire il comando install di Advanced Package Manager — di solito con il permesso di root — per installare il pacchetto necessario. Come accennato in precedenza, le configurazioni sono molto più semplici per sendmail
quando si astrae la complessità della configurazione. Questo può essere fatto con SSMTP:
sudo apt install ssmtp
Passo 3. Verificare l’installazione
Dopo l’installazione completata, è possibile verificare se sendmail
è in grado di inoltrare i messaggi., Digitare il codice seguente nel terminale:
echo "Subject: hello" | sendmail [email protected]
Dovrebbe inviare l’e-mail se tutto funziona correttamente. Qui la stringa"hello"
convogliata al comandosendmail
sarà l’oggetto del messaggio inviato, mentre l’indirizzo email definito è naturalmente il destinatario dell’email.
Si esegue il comando… e, oops: sendmail: Cannot open mailhub:25
. La ragione di ciò è che non abbiamo fornito affatto le impostazioni di mailhub. Per inoltrare i messaggi, è necessario un server SMTP configurato., Ecco dove SSMTP funziona davvero bene: devi solo modificare il suo file di configurazione una volta e sei a posto.
Passaggio 4. Configurazione di SSMTP
Localizziamo il file di configurazione in/etc/ssmtp/ssmtp.conf
. Qui, dovresti inserire il codice qui sotto per configurare un relè SMTP:
Ciò significa che hai impostato un servizio esterno che inoltrerà effettivamente le tue e-mail. Quando fornisci le credenziali a Gmail, ad esempio, vedrai i messaggi inviati dal terminale nella directory “Posta inviata” della tua casella di posta. Le configurazioni sembrano simili anche con altri servizi.,
Questa era la configurazione di base per sendmail
e la procedura di installazione per qualsiasi pacchetto di mailer da riga di comando usato di frequente. Successivamente, salteremo sull’installazione e provare vari altri pacchetti.
Invio di e-mail utilizzando il comando SSMTP
Questo è un bel piccolo strumento che abbiamo appena configurato per la consegna della posta. Come suggerisce la sua pagina man
, è un emulatore minimalista di sendmail
. Come tale, SSMTP consente agli utenti di trasferire e-mail attraverso un server SMTP dalla riga di comando di Linux., Fornisce i mezzi per connettersi a un mailhub con un file di configurazione corretto. Se il tuo file di configurazione è stato impostato correttamente, tutte le tue preoccupazioni per l’invio di e-mail da riga di comando possono scomparire.
Implementazione di base del comando SSTMP:
Se usi semplicemente SSMTP, il comando dovrebbe apparire come segue:
ssmtp [email protected] < mail.txt
Seguendo il comandossmtp
, dovresti inserire l’indirizzo del destinatario, quindi puoi includere un file che verrà visualizzato nel corpo dell’e-mail. Qui è possibile definire le intestazioni per il messaggio, elencare ulteriori destinatari e impostare il tipo di contenuto., In questo modo è possibile inviare e-mail HTML. SSMTP interpreterà il tuo messaggio e utilizzerà correttamente i valori forniti. Ecco un esempio di un HTML che potresti inviare:
Non puoi davvero dare ulteriori opzioni con SSMTP in quanto non sono rispettate dal suo design minimalista.
Risoluzione dei problemi:
Nel caso in cui si verifichi il seguente errore sulla riga di comando:
è probabile che Gmail non tratti SSMTP come un’applicazione sicura. Per eliminare questo errore, è necessario modificare le impostazioni nel tuo account Gmail – è possibile cercare ulteriori informazioni sui potenziali rischi anche lì.,
Inviare e-mail Usando il comando Sendmail
Da un po ‘ di tempo sendmail è il classico agente di trasferimento di posta dal mondo di UNIX. È stato introdotto per la prima volta nel 1979 e la sua natura altamente configurabile e scalabilità lo ha reso il go-to predefinito per gli amministratori del server.,
Abbiamo già visto come per l’invio di base-mail da parte del ssmtp
comando, così vediamo la differenza con sendmail
:
echo "Subject: hello" | sendmail -v [email protected] < mail.txt
ci ho buttato dentro il -v
argomento, che la comunicazione tra il server di posta e il vostro agente di trasferimento della posta visibili.
Ci sono un sacco di configurazioni che è possibile utilizzare se si imposta il proprio server di posta e implementare sendmail su di esso. Tuttavia, questo è fuori dallo scopo di questo articolo. Torneremo sull’argomento in un prossimo. Restate sintonizzati.,
Invio di e-mail utilizzando il comando CURL
Questo strumento è anche tremendamente comune per il trasferimento di dati da un server. Supporta molti protocolli, come HTTP, FTP, POP3 o SMTP. Il pacchetto CURL è ampiamente utilizzato in tutto il mondo, uno dei motivi principali è che ha un’implementazione PHP nativa e PHP è stato il linguaggio di scripting server-side predefinito per molto tempo.
Installazione:
Controlla se il pacchetto è già installato., Se non esegui il seguente:
sudo apt install curl
Quando hai finito, puoi accedere al cheat sheet per le opzioni disponibili per CURL eseguendo curl -h
. La versione più dettagliata è accessibile da man curl
ocurl --manual
. Se vuoi acquisire conoscenze approfondite usando cURL, c’è questo pratico Ebook che contiene tutto ciò che vorresti sapere.
Implementazione di base per l’invio di e-mail con CURL:
Per inviare un’e-mail con CURL, è necessario impostare la connessione SMTP., Molto spesso i server di posta in uscita di Google o Yahoo vengono utilizzati per testare l’invio di e-mail con SMTP. Si prega di notare che è necessario attivare l’accesso per le applicazioni meno sicure nelle impostazioni di Gmail e simili impostazioni di sicurezza aggiuntive possono applicare per Yahoo pure.
Nel frammento di comando terminale sopra, i parametri --url
e --user
definiscono le impostazioni di connessione SMTP. La sezione password per il parametro--user
è la password del tuo account per l’indirizzo email specificato. Naturalmente, si potrebbe anche utilizzare cloud provider di servizi di posta elettronica., Mostrerò che usando Mailgun nella sezione seguente.
Implementazione avanzata per l’invio di e-mail con CURL:
Lavorando con le piattaforme di consegna e-mail, è necessario prima ottenere una chiave API. In questo tutorial, vi mostrerò CURL e-mail l’invio di esempio utilizzando Mailgun, quindi se ti trovi in difficoltà durante il processo di registrazione seguire questa guida di installazione per ottenere sulla strada giusta.
La sintassi è piuttosto semplice. Potresti averlo notato prima, ma devi terminare ogni riga del comando con \
caratteri., Questo è un carattere di continuazione della riga, il comando può essere eseguito anche senza di loro in una riga. L’altra cosa da ricordare è l’opzione -F
. Un estratto dalla pagina man:
-F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to RFC 2388. This enables uploading of binary files etc. To force the 'content' part to be a file, prefix the file name with an @sign.
Come ho incoraggiato prima, è una buona pratica immergersi nei manuali quando si utilizzano questi comandi da riga di comando. Come dice il manuale CURL, in pratica stai creando un modulo da inviare. Ogni riga è una voce data come coppianame=content
. Quando si allegano file dal computer locale, è necessario un @
davanti al nome del file.,
Ecco come sarà l’e-mail consegnata:
Potresti fare lo stesso usando la maggior parte delle altre piattaforme di consegna e-mail, come Sendgrid per esempio.
Invio di email HTML dalla riga di comando con CURL:
È possibile applicare la stessa logica di costruzione di un modulo in un file di testo, che consente di inviare messaggi HTML facilmente:
Se si esegue il comando semplice dal primo esempio…
Risoluzione dei problemi:
Potrebbe essere necessario lo switch--insecure
, che consente a CURL di eseguire connessioni e trasferimenti SSL “non sicuri”., CURL restituirà un messaggio di errore se il server remoto utilizza un certificato autofirmato o se il certificato del server remoto non è firmato da una CA elencata nel file CA cert.
Inviare e-mail Usando il comando Swaks
Come afferma la loro documentazione, Swaks è uno strumento di test SMTP flessibile, scriptabile e orientato alle transazioni. È in grado di gestire funzionalità ed estensioni SMTP come TLS, autenticazione e pipelining e versioni multiple dei protocolli SMTP. Supporta anche più metodi di trasporto tra cui socket di dominio UNIX, socket di dominio Internet e pipe per i processi generati.,
Installazione:
sudo apt install swaks
implementazione di Base per l’invio di email con Swaks:
per connettersi a un account SMTP è necessario fornire il server -s
utente -au
la password -ap
e l’indirizzo -t
(a cui si desidera inviare la posta elettronica) bandiere. Il flag-tls
è importante anche se ci si connette sulla porta587
.,
swaks --to [email protected] -s smtp.gmail.com:587 -tls -au <user-account> -ap <account-password>
Le credenziali possono essere fornite anche tramite prompt della riga di comando, se si specifica solo di autenticare-a
, non compilando l’utente e la password tramite le opzioni della riga di comando.
Implementazione avanzata per l’invio di e-mail con Swak:
swaks --to [email protected] -s smtp.gmail.com:587 -tls -au <user-account> -ap <account-password> --attach -d ./mail.txt
Ci sono altre opzioni che non toccheremo ora. Andiamo al nostro prossimo pacchetto mailer!
Inviare e-mail utilizzando il comando Mutt
Mutt è diverso dai precedenti client di posta elettronica, in quanto è un client di posta elettronica a riga di comando ricco di funzionalità., Puoi usarlo per leggere le email dal terminale Linux, collegarti alle cassette postali degli utenti locali o ai server POP / IMAP. Mutt supporta diversi formati di cassette postali come mbox, MH, maildir, MMDF, il pieno controllo delle intestazioni dei messaggi durante la composizione e-mail, e più messaggio di tagging e colori per gestire i messaggi.
Installazione:
sudo apt install mutt
Implementazione di base per l’invio di e-mail con mutt:
A questo punto non sarai sorpreso dalla struttura del comando., È possibile fornire un corpo del messaggio vuoto con< /dev/null
:
# mutt -s "Test Email" [email protected] < /dev/null
Implementazione avanzata per l’invio di e-mail con mutt:
Per l’invio di e-mail inclusi gli allegati, è necessario il flag-a
. In questo modo è possibile inviare file utili, come i log di sistema, a un indirizzo specificato.
# mutt -s "System logs" -a /opt/backup.sql [email protected] < /dev/null
Puoi anche inviare email HTML se l’estensione del file che aggiungi al corpo del messaggio è in formato HTML., Mutt riconoscerà il tipo di file e lo risolverà in modo che non invii il tuo HTML come testo normale:
mutt -s "Email subject" [email protected] < email.html
Questo è per l’invio di e-mail con mutt. Se lo hai sul tuo computer, ti suggerisco di provare come puoi lavorare con la configurazione in entrata della tua casella di posta e la gestione dei messaggi in arrivo. In tal caso, si prega di condividere i tuoi pensieri nella sezione commenti qui sotto. Accolgo con favore qualsiasi opinione sui pacchetti mostrati nel tutorial.
Invio di e-mail utilizzando il comando Mailx
Mailutils è un pacchetto composto per più casi d’uso., È progettato per servire utenti regolari, amministratori di sistema e sviluppatori. Toccheremo solo le sue funzionalità di base per quanto riguarda l’inoltro delle e-mail. Se sei interessato a più funzionalità, controlla la sua paginaman
.
Installazione:
sudo apt install mailutils
Implementazione di base per l’invio di e-mail con mailx:
Il pacchetto mailx ha 2 sintassi di comando uguali (mail
e mailx
entrambi funzionano esattamente allo stesso modo)., Il comando più semplicistico consiste nel comandomail/mailx
e nell’indirizzo a cui inviare la posta, ma probabilmente includerai l’oggetto e almeno un corpo del messaggio basato sul testo. Tale comando dovrebbe essere simile a questo:
echo "message body" | mail -s "subject" [email protected]
Utilizzando il comando echo
e collegando l’output al comando mail
, è possibile evitare i prompt aggiuntivi di mailx per gli indirizzi Cc e il corpo del messaggio.,
Implementazione avanzata per l’invio di e-mail con mailx:
Per l’esempio avanzato, invieremo nuovamente un’e-mail HTML a tutti gli effetti. Dobbiamo fornire il file HTML di posta elettronica di nostra scelta con il carattere<
e aggiungere il “flag append” con il tipo di contenuto. Il codice completo appare come segue:
mailx -a 'Content-Type: text/html' -s "This is advanced mailx indeed!" < email.html "[email protected], [email protected]"
È anche possibile impostare un indirizzo di ritorno con --return-address=<EMAIL-ADDRESS>
, che può essere utile., Un’altra opzione utile, che non ho potuto risolvere per lavorare con la posta elettronica HTML parallela, è fornire allegati nello stesso messaggio: -A "mail.txt"
. Sebbene sia possibile elencare più destinatari, è possibile allegare solo un singolo allegato. È possibile configurare il server SMTP esterno se ti piace.
Utilizzo del comando Openssl alternativo Telnet
Telnet è un protocollo di comunicazione interattivo per la comunicazione con un altro host. Potrebbe essere utilizzato per aprire una connessione SMTP a un altro server e trasferire messaggi di posta elettronica., Tuttavia, poiché il protocollo non è protetto, la maggior parte dei server rifiuterà questo tipo di comunicazione. Questo è dove Openssl entra in scena come è costruito con SSL/TLS sicurezza inclusa. Viene invocato in modo simile a telnet con un argomento host ed esegue implicitamente un comando aperto:
Ho indentato gli input che devi fornire mentre il canale di comunicazione è aperto. Questi input sono auto-esplicativi, ma una cosa che devo dettagliare è l’hash della password. Può essere un hash codificato base64, che puoi ottenere con il seguente comando: echo -en '\[email protected]\000gmailpassword' | base64
., I caratteri di escape dalla stringa non possono essere omessi. Se il pacchetto base64 non è installato, è disponibile tramite gestori di pacchetti.
Come puoi vedere sopra, questo mezzo di invio di e-mail fornisce solo un’interfaccia per i messaggi basati su testo, quindi ha la sua limitazione nei casi d’uso. D’altra parte, mostra tutte le informazioni scambiate con il server di posta, il che rende il debug davvero facile.
Risoluzione dei problemi di posta
Controllare i registri di posta
È necessario individuare il file di registro navigando nella cartella corrispondente. Preferisco usare il mio editor di codice(ad es., Sublime Text) per questo in modo da poter avere i registri con evidenziazione della sintassi:
$ sudo subl /var/log
A seconda della distribuzione Linux corrente potrebbe essere necessario guardare una fonte diversa.
Il registro può contenere informazioni utili sui problemi di deliverability. A questo punto, quando scorri fino in fondo a questo:
puoi controllare se la consegna ha esito positivo o capire perché il processo non è riuscito.,
Può accadere che la tua console non mostri errori, ma nel registro della posta puoi vedere che il messaggio è stato accodato per la consegna, quindi il processo non si è fermato sulla tua macchina ma probabilmente è stato negato dal server di posta che stavi cercando di raggiungere.
Esecuzione di tutti i comandi in una sequenza
Quindi, tutto è pronto per il test finale. Tutti i comandi del terminale mailer sono raccolti qui in un file di script. Una volta scaricata la cartella di lavoro con il file di script, passare alla cartella contenente e rendere eseguibile lo script: chmod u+x mail.sh
., Se hai tutti i file che ho fornito pronti, puoi iniziare a testare i comandi del mailer mostrati nel tutorial. Devi solo sostituire "<RECIPIENT ADDRESS>"
al tuo indirizzo email di prova nel codice ed eseguire./mail.sh
nella riga di comando.
Una volta che lo script termina l’esecuzione, la tua casella di posta verrà riempita con le e-mail di prova.
Ben fatto!
Sommario
In questo articolo, vi ho mostrato molti modi per inviare e-mail dalla riga di comando di Linux. Speriamo che, in base a ciò che hai visto, puoi installare e configurare questi servizi sulla tua macchina anche tu.,
Il post mostrava i pacchetti di mailer da riga di comando più comunemente usati e come inviare e-mail con loro, e alla fine, ho creato uno script di shell che raccoglie tutti i comandi utilizzati nell’articolo. È possibile scaricare i file di lavoro dei progetti qui e, se si installano i pacchetti introdotti nel tutorial e si inseriscono anche le credenziali e i dettagli del destinatario, è possibile eseguire lo script a proprio piacimento.