GNU/Linux >> Linux Esercitazione >  >> Linux

9 esempi di comandi mail/mailx per inviare e-mail dalla riga di comando su Linux

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".


Linux
  1. 4 modi per inviare allegati e-mail dalla riga di comando di Linux

  2. Cerca torrent dalla riga di comando in Linux

  3. Invia e-mail dal terminale linux o dallo script usando il comando mail

  4. Come inviare posta tramite server SMTP esterno utilizzando il comando mailx in Linux?

  5. Come inviare e-mail HTML utilizzando il comando "posta" di Linux?

Programma hardware dalla riga di comando di Linux

Comando Diff in Linux con esempi

comando mailx in linux – invia e ricevi posta Internet

Invia e-mail in Linux dalla riga di comando

Utilizzo del comando Linux sed con esempi

Mutt, Mail e Telnet – Invia e-mail dalla riga di comando o dal terminale di Linux