Invia messaggi da riga di comando
Il comando mail è essenziale e dovrebbe essere disponibile su qualsiasi server Linux in modo che vari servizi e altre applicazioni Web possano generare e trasmettere e-mail.
In un post precedente sul comando mail abbiamo visto come il comando mail può essere utilizzato per inviare e-mail dalla riga di comando sul tuo server Linux.
In questo tutorial utilizzeremo una versione avanzata del comando mail. Si chiama mailx (o semplicemente mail una volta installato) e può fare molte più cose di quelle che può fare il vecchio comando mail del pacchetto gnu mailutils.
Come funziona
Il comando mail/mailx necessita di un server smtp locale (MTA) in esecuzione per recapitare le e-mail. Il percorso seguito dall'e-mail è un po' così -
mail -> sendmail -> local MTA -> recipient MTA [Inbox]
L'MTA del destinatario sarebbe il server smtp di Gmail se il destinatario è qualcuno su gmail.com, ad esempio. Per l'MTA locale, è necessario installare un server SMTP come Postfix. Un'installazione di base di Postfix con una configurazione minima funzionerebbe nella maggior parte dei casi.
Installa il comando mailx
Sui sistemi basati su Ubuntu/Debian il comando mailx è disponibile da 2 diversi pacchetti -
1. cimelio-mailx
2. bsd-mailx
Utilizzeremo il pacchetto heirloom-mailx perché ha più funzionalità e opzioni.
Sui sistemi basati su CentOS/Fedora, esiste un solo pacchetto chiamato "mailx" che è il pacchetto heirloom.
Per scoprire quale pacchetto mailx è installato sul tuo sistema, controlla l'output "man mailx" e scorri fino alla fine e dovresti vedere alcune informazioni utili.
# ubuntu/debian $ sudo apt-get install heirloom-mailx # fedora/centos $ sudo yum install mailx
Utilizzo del comando mailx
Una volta installato, il comando mailx può essere referenziato direttamente con il nome mail, quindi è sufficiente digitarlo nella riga di comando.
1. Posta semplice
Esegui il comando seguente, quindi mailx aspetterà che tu inserisca il messaggio dell'e-mail. Puoi premere invio per nuove righe. Al termine della digitazione del messaggio, premi Ctrl+D e mailx visualizzerà EOT.
Dopodiché mailx consegna automaticamente l'e-mail alla destinazione.
$ mail -s "This is the subject" [email protected] Hi someone How are you I am fine Bye EOT
2. Prendi un messaggio da un file
Anche il corpo del messaggio dell'email può essere preso da un file.
$ mail -s "This is Subject" [email protected] < /path/to/file
Il messaggio può anche essere inviato tramite pipe usando il comando echo -
$ echo "This is message body" | mail -s "This is Subject" [email protected]
3. Più destinatari
Per inviare la posta a più destinatari, specifica tutte le email separate da una virgola
$ echo "This is message body" | mail -s "This is Subject" [email protected],[email protected]
4. CC e BCC
Le opzioni "-c" e "-b" possono essere utilizzate per aggiungere rispettivamente indirizzi CC e BCC.
$ echo "This is message body" | mail -s "This is Subject" -c [email protected] [email protected]
5. Specificare Da nome e indirizzo
Per specificare un nome e un indirizzo "DA", utilizzare l'opzione "-r". Il nome deve essere seguito dall'indirizzo racchiuso tra "<>".
$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" [email protected]
6. Specifica l'indirizzo "Rispondi a"
La risposta all'indirizzo viene impostata con la variabile di opzione interna "replyto" utilizzando l'opzione "-S".
# replyto email $ echo "This is message" | mail -s "Testing replyto" -S replyto="[email protected]" [email protected] # replyto email with a name $ echo "This is message" | mail -s "Testing replyto" -S replyto="Mark<[email protected]>" [email protected]
7. Allegati
Gli allegati possono essere aggiunti con l'opzione "-a".
$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" -a /path/to/file [email protected]
8. Usa un server SMTP esterno
Questa è una funzionalità esclusiva, che puoi ottenere solo con heirloom mailx e non con bsd mailx, o il comando mail di gnu mailutils o il comando mutt.
Il comando mailx può utilizzare un server SMTP esterno da utilizzare per inoltrare il messaggio. La sintassi è un po' lunga ma ha senso.
$ echo "This is the message body and contains the message" | mailx -v -r "[email protected]" -s "This is the subject" -S smtp="mail.example.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="abc123" -S ssl-verify=ignore [email protected]
Ecco una ripartizione
$ echo "This is the message body and contains the message" | mailx -v \ > -r "[email protected]" \ > -s "This is the subject" \ > -S smtp="mail.example.com:587" \ > -S smtp-use-starttls \ > -S smtp-auth=login \ > -S smtp-auth-user="[email protected]" \ > -S smtp-auth-password="abc123" \ > -S ssl-verify=ignore \ > [email protected]
Puoi utilizzare i server SMTP di Gmail e inviare e-mail tramite il tuo account Gmail. È fantastico!
Per Gmail, in particolare, dovresti abilitare le impostazioni delle app meno sicure prima di poter inviare posta del genere.
9. Verbose - guarda la comunicazione smtp
Quando si utilizzano server SMTP esterni, è possibile scegliere di guardare l'intera comunicazione SMTP eseguita in background. Ciò è utile specialmente durante il test o il debug di server SMTP.
$ echo "This is the message body and contains the message from heirloom mailx" | mailx -v -s "This is the subject" -S smtp="smtp.gmail.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="mypassword" -S ssl-verify=ignore [email protected] Resolving host smtp.gmail.com . . . done. Connecting to 74.125.68.109:587 . . . connected. 220 mx.google.com ESMTP je4sm32812877pbd.94 - gsmtp >>> EHLO enlightened 250-mx.google.com at your service, [122.163.43.21] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 >>> STARTTLS 220 2.0.0 Ready to start TLS >>> EHLO enlightened 250-mx.google.com at your service, [122.163.43.21] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 >>> AUTH LOGIN 334 VXNlcmU6 >>> YmnbWFpbC5jb20= 334 UGFzcmQ6 >>> KnJgzKg== 235 2.7.0 Accepted >>> MAIL FROM:<[email protected]> 250 2.1.0 OK je4sm32812877pbd.94 - gsmtp >>> RCPT TO:<[email protected]> 250 2.1.5 OK je4sm32812877pbd.94 - gsmtp >>> DATA 354 Go ahead je4sm32812877pbd.94 - gsmtp >>> . 250 2.0.0 OK 1417930703 je4sm32812877pbd.94 - gsmtp >>> QUIT 221 2.0.0 closing connection je4sm32812877pbd.94 - gsmtp
Risoluzione dei problemi
Nel caso in cui le e-mail non vengano consegnate correttamente, è necessario controllare alcune cose. La prima cosa da controllare è che un server SMTP (mta) sia in esecuzione localmente. Il comando netstat può dirlo
$ sudo netstat -ltnp | grep 25 [sudo] password for enlightened: tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2541/master tcp6 0 0 :::25 :::* LISTEN 2541/master
Se un server stmp come Postfix è in esecuzione e la posta continua a non funzionare, prova ad esempio a riconfigurare Postfix. Sui sistemi Ubuntu/Debian, questo può essere fatto con il comando dpkg-reconfigure
$ sudo dpkg-reconfigure postfix
Quindi riprova, il comando mail e dovrebbe funzionare. In caso contrario, prova a contattare il provider del server.
Nessuna posta dai sistemi locali
Se provi a inviare e-mail dal tuo computer locale a un indirizzo gmail, molto probabilmente la tua posta verrebbe rifiutata, quindi non provare a farlo.
Questo perché i normali computer collegati a un indirizzo Internet hanno un indirizzo IP che non è associato ad alcun dominio valido in quanto tale e Gmail verifica rigorosamente tali credenziali prima di approvare il passaggio di qualsiasi posta.
Note e risorse
Oltre a mailx, ci sono altri strumenti come Swaks e smtp-cli che possono essere utilizzati per inviare e-mail dalla riga di comando e supportano varie funzionalità come specificare i server smtp e aggiungere allegati e così via.
Tuttavia il comando mailx è disponibile nei repository predefiniti delle distribuzioni più comuni, quindi può essere installato facilmente. Inoltre mantiene una sintassi molto simile a quella del comando mail che lo rende un sostituto del vecchio comando mail.
Il comando mailx è anche in grado di leggere la posta da server IMAP remoti, ma è qualcosa che abbiamo tenuto fuori da questo post e ne parleremo più tardi. Per saperne di più controlla la pagina man del comando mailx con "man mailx".