GNU/Linux >> Tutoriels Linux >  >> Linux

9 exemples de commandes mail/mailx pour envoyer des e-mails depuis la ligne de commande sous Linux

Envoyer des e-mails depuis la ligne de commande

La commande mail est une commande essentielle qui devrait être disponible sur n'importe quel serveur Linux afin que divers services et autres applications Web puissent générer et transmettre des e-mails.

Dans un article précédent sur la commande mail, nous avons vu comment la commande mail peut être utilisée pour envoyer des e-mails à partir de la ligne de commande sur votre serveur Linux.

Dans ce didacticiel, nous utiliserons une version améliorée de la commande mail. Il s'appelle mailx (ou simplement mail lorsqu'il est installé), et il peut faire beaucoup plus de choses que ce que l'ancienne commande mail du paquet gnu mailutils peut faire.

Comment ça marche

La commande mail/mailx nécessite un serveur smtp local (MTA) en cours d'exécution afin de livrer les e-mails. L'itinéraire emprunté par l'e-mail ressemble un peu à ceci -

mail -> sendmail -> local MTA -> recipient MTA [Inbox]

Le MTA destinataire serait le serveur smtp de gmail si votre destinataire est quelqu'un sur gmail.com par exemple. Pour le MTA local, vous devez installer un serveur smtp comme Postfix. Une installation de base de Postfix avec une configuration minimale fonctionnerait dans la plupart des cas.

Installer la commande mailx

Sur les systèmes basés sur Ubuntu/Debian, la commande mailx est disponible à partir de 2 packages différents -

1. héritage-mailx
2. bsd-mailx

Nous utiliserons le paquet heirloom-mailx car il a plus de fonctionnalités et d'options.
Sur les systèmes basés sur CentOS/Fedora, il n'y a qu'un seul paquet nommé "mailx" qui est le paquet heirloom.

Pour savoir quel paquet mailx est installé sur votre système, vérifiez la sortie "man mailx" et faites défiler jusqu'à la fin et vous devriez voir des informations utiles.

# ubuntu/debian
$ sudo apt-get install heirloom-mailx
# fedora/centos
$ sudo yum install mailx

Utiliser la commande mailx

Une fois installée, la commande mailx peut être directement référencée avec le nom mail, il vous suffit donc de le saisir dans la ligne de commande.

1. Courrier simple

Exécutez la commande suivante, puis mailx attendra que vous saisissiez le message de l'e-mail. Vous pouvez appuyer sur Entrée pour de nouvelles lignes. Lorsque vous avez terminé de taper le message, appuyez sur Ctrl+D et mailx affichera EOT.

Ensuite, mailx livre automatiquement l'e-mail à la destination.

$ mail -s "This is the subject" [email protected]
Hi someone
How are you
I am fine
Bye
EOT

2. Prendre le message d'un fichier

Le corps du message de l'e-mail peut également être extrait d'un fichier.

$ mail -s "This is Subject" [email protected] < /path/to/file

Le message peut également être canalisé à l'aide de la commande echo -

$ echo "This is message body" | mail -s "This is Subject" [email protected]

3. Plusieurs destinataires

Pour envoyer l'e-mail à plusieurs destinataires, indiquez tous les e-mails séparés par une virgule

$ echo "This is message body" | mail -s "This is Subject" [email protected],[email protected]

4. CC et BCC

Les options "-c" et "-b" peuvent être utilisées pour ajouter respectivement des adresses CC et BCC.

$ echo "This is message body" | mail -s "This is Subject" -c [email protected] [email protected]

5. Spécifiez le nom et l'adresse de l'expéditeur

Pour spécifier un nom et une adresse "FROM", utilisez l'option "-r". Le nom doit être suivi de l'adresse entourée de "<>".

$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" [email protected]

6. Spécifiez l'adresse "Répondre à"

L'adresse de réponse est définie avec la variable d'option interne "replyto" en utilisant l'option "-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. Pièces jointes

Les pièces jointes peuvent être ajoutées avec l'option "-a".

$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" -a /path/to/file [email protected]

8. Utiliser un serveur SMTP externe

Il s'agit d'une fonctionnalité exclusive, que vous obtenez uniquement avec heirloom mailx et non bsd mailx, ou la commande mail de gnu mailutils ou la commande mutt.

La commande mailx peut utiliser un serveur smtp externe pour relayer le message. La syntaxe est un peu longue mais logique.

$ 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]

Voici une ventilation

$ 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]

Vous pouvez utiliser les serveurs smtp gmail et envoyer des e-mails via votre compte gmail. C'est tellement cool !
Pour Gmail en particulier, vous devez activer les paramètres des applications moins sécurisées avant de pouvoir envoyer des e-mails de ce type.

9. Verbose - surveiller la communication smtp

Lorsque vous utilisez des serveurs smtp externes, vous pouvez choisir de surveiller l'intégralité de la communication smtp qui se fait en arrière-plan. Ceci est particulièrement utile lors du test ou du débogage des serveurs 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

Dépannage

Si les e-mails ne sont pas livrés correctement, vous devez vérifier quelques éléments. La première chose à vérifier est qu'un serveur smtp (mta) fonctionne localement. La commande netstat peut le dire

$ 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

Si un serveur stmp comme Postfix est en cours d'exécution et que les e-mails ne vont toujours pas, essayez de reconfigurer Postfix par exemple. Sur les systèmes Ubuntu/Debian, cela peut être fait avec la commande dpkg-reconfigure

$ sudo dpkg-reconfigure postfix

Ensuite, réessayez, la commande mail et cela devrait fonctionner. Si ce n'est toujours pas le cas, essayez de contacter votre fournisseur de serveur.

Aucun e-mail des systèmes locaux

Si vous essayez d'envoyer des e-mails depuis votre ordinateur local vers une adresse gmail, votre e-mail sera probablement rejeté, alors n'essayez pas de le faire.

En effet, les ordinateurs ordinaires connectés à une adresse Internet ont une adresse IP qui n'est associée à aucun domaine valide en tant que tel, et gmail vérifie strictement ces informations d'identification avant d'approuver le passage de tout courrier.

Remarques et ressources

Outre mailx, il existe d'autres outils tels que Swaks et smtp-cli qui peuvent être utilisés pour envoyer des e-mails à partir de la ligne de commande et prendre en charge diverses fonctionnalités telles que la spécification de serveurs smtp et l'ajout de pièces jointes, etc.

Cependant, la commande mailx est disponible dans les référentiels par défaut des distributions les plus courantes, elle peut donc être installée facilement. De plus, il conserve une syntaxe très similaire à celle de la commande mail, ce qui en fait un remplacement direct de l'ancienne commande mail.

La commande mailx est même capable de lire les e-mails à partir de serveurs IMAP distants, mais c'est quelque chose que nous avons gardé hors de ce message et dont nous parlerions plus tard. Pour en savoir plus, consultez la page de manuel de la commande mailx avec "man mailx".


Linux
  1. Envoyer un e-mail à partir d'un terminal Linux ou d'un script à l'aide de la commande mail

  2. Comment envoyer du courrier via un serveur SMTP externe à l'aide de la commande mailx sous Linux ?

  3. Comment envoyer un e-mail à partir de la ligne de commande ?

  4. envoyer du courrier depuis le terminal linux en une seule ligne

  5. Comment envoyer un message à mon websocket socket.io à partir de la ligne de commande sous Linux ?

Programmer le matériel à partir de la ligne de commande Linux

Commande Diff sous Linux avec exemples

commande mailx sous Linux - envoyer et recevoir du courrier Internet

Envoyer un e-mail sous Linux à partir de la ligne de commande

Utilisation de la commande Linux sed avec des exemples

Mutt, Mail et Telnet - Envoyez des e-mails à partir de la ligne de commande Linux ou du terminal