Comment envoyer un e-mail depuis le terminal?

169

Je sais qu'il existe des moyens d'envoyer des e-mails depuis un terminal sous Linux / MacOS, mais je n'arrive pas à trouver la documentation appropriée sur la façon de le faire.

En gros, j'en ai besoin pour mon script bash qui me prévient chaque fois qu'il y a un changement dans un fichier.

NoobDev4iPhone
la source
3
Il convient probablement de noter ici que certains hébergeurs et FAI "désactivent" la possibilité pour vous d'envoyer des e-mails. Je suppose que c'est une tentative pour empêcher les gens de spammer et de phishing à travers eux
Jim Jeffries
@JimJeffries Lesquels? J'utilise un serveur Web Amazon EC2.
ckjbgames

Réponses:

125

Allez dans Terminal et tapez man mailpour obtenir de l'aide.

Vous devrez configurer SMTP:

http://hints.macworld.com/article.php?story=20081217161612647

Voir également:

http://www.mactricksandtips.com/2008/09/send-mail-over-your-network.html

Par exemple:

mail -s "hello" "[email protected]" <<EOF
hello
world
EOF

Cela enverra un e-mail à [email protected]avec l'objet helloet le message

Bonjour

Monde

gadgetmo
la source
J'ai juste essayé, et cela a fonctionné pour moi, mais j'ai deux questions par curiosité. Que signifie <<, en ligne, j'ai vu quelques exemples avec '<' ou '<<. ' A quoi cela sert? Et pourquoi avez-vous donné End Of File là-bas et à la fin du message?
Deep
Les "<< EOF" et "EOF" marquent un "ici-document". Le texte entre les deux EOF est traité comme une chaîne entre guillemets multilignes. Il est décrit dans 'man bash'
Joe Inwap
134
echo "this is the body" | mail -s "this is the subject" "to@address"
Earldouglas
la source
20
Notez que toutes ces solutions supposent que vous avez un MTA installé localement
Miquel
11
@Miquel bon point. Dans Ubuntu, vous pouvez obtenir les prérequis via sudo apt-get install mailutils.
earldouglas
3
@James, ça ne marche pas pour mon MAC (((Pourriez-vous m'aider?
neo
1
Tutoriel étape par étape: rianjs.net/2013/08/…
Dušan Maďar
Étrange. Cela me donne un message "SyntaxError: syntaxe invalide" bien que le seul changement que j'ai fait était de changer l'adresse.
Jewenile
41

Si tout ce dont vous avez besoin est une ligne d'objet (comme dans un message d'alerte), faites simplement:

mailx -s "This is all she wrote" < /dev/null "myself@myaddress"
JRFerguson
la source
Vous devrez peut-être installer mailutils. Il peut être installé via un gestionnaire de paquets (par exemple apt install mailutils)
Jeevan Takhar
31

Le moyen le plus simple est probablement d'utiliser curlpour cela, il n'est pas nécessaire d'installer de packages supplémentaires et il peut être configuré directement dans une requête.

Voici un exemple d'utilisation du serveur smtp gmail:

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
  --mail-from '[email protected]' \
  --mail-rcpt '[email protected]' \
  --user '[email protected]:YourPassword' \
  -T <(echo -e 'From: [email protected]\nTo: [email protected]\nSubject: Curl Test\n\nHello')
Aliaksandr Sushkevich
la source
C'est une très bonne option. Vous pouvez générer un mot de passe spécifique à l'application pour votre compte Google et cela ne fait que livrer l'e-mail de votre propre compte. Très cool!
dakdad
2
Excellente réponse, enfin n'oubliez pas d'activer l'application la moins sécurisée pour faire fonctionner myaccount.google.com/lesssecureapps
yubaraj poudel
@aliaksandr devrait ajouter ce dernier point à sa réponse. Par défaut, cette option (donner accès à des applications moins sécurisées) est désactivée et ce n'est pas évident. Au moins si vous utilisez un compte Gmail comme e-mail d'expéditeur.
EAmez
18

Si vous souhaitez joindre un fichier sous Linux

echo 'mail content' | mailx -s 'email subject' -a attachment.txt username@stackoverflow.com
MiaeKim
la source
4
Il donne un invalid headermessage pour mon fichier joint. L'option correcte était une majuscule -A.
Stephane
3
@Stephane Selon patrick-haugh, -a est le commutateur d'attachement. -A est pour la commande de compte. Voir la page de manuel
MiaeKim
10

dans le terminal de votre mac os ou linux os tapez ce code

mail -s (subject) (receiversEmailAddress)  <<< "how are you?"

pour un exemple, essayez ceci

mail -s "hi" abc@example.com <<< "how are you?"<br>
Pramodya Abeysinghe
la source