Comment envoyer un email depuis la ligne de commande?


29

Comment envoyer un e-mail à partir d'une ligne de commande ou d'un script? Je veux pouvoir exécuter le script par programme en passant le récepteur et le message.


Si vous écrivez un programme, de nombreuses langues ont des bibliothèques qui traitent du courrier électronique
user151019

Réponses:


22

mail -s subject someone@example.com tapez votre message, appuyez sur Ctrl+Dpour terminer


11
Si vous n'avez pas configuré votre système pour lui dire où envoyer des e-mails, cela n'enverra probablement pas réellement d'e-mails, il s'accumulera simplement sur mon Mac.
TJ Luoma

15
-1: Cette réponse est incomplète. À moins que le système n'ait été configuré avant d'exécuter cette commande, comme l'a noté @TJLuoma, cette commande ne fonctionnera pas.
melvynkim

1
TJ Luoma et melvkim sont incorrects: un système OS X standard prêt à l'emploi enverra très bien des e-mails sans configuration requise. La machine OS X agira comme son propre serveur SMTP, recherchant le MX MX pour le domaine de destination et y envoyant le courrier.
JohnEDee

2
@patrix, Correct, il utilise le nom d'utilisateur long du compte connecté et l'adresse ".local" auto-générée du Mac pour former un "De". Je l'utilise tout le temps pour les e-mails de notification à moi et à mon personnel provenant de processus scriptés par shell. TJ Luoma et melvkim disaient que "cela ne fonctionnera pas" et "n'enverra pas réellement d'email", cependant, les deux sont incorrects.
JohnEDee

1
@RamarajT, oui, vous pouvez diriger la sortie de la commande echo vers le courrier, et cela ne nécessitera alors pas de Cmd-D. Par exemple: echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

Il y a deux programmes que je connais qui vous permettront facilement de configurer votre Mac pour envoyer des e-mails à partir de la ligne de commande.

J'ai rédigé des HOWTO pour les deux:

Des deux, je suggère msmtp.

La configuration est suffisamment compliquée pour que je ne sois pas sûr de devoir répliquer toutes les étapes ici, mais je mentionnerai que si vous utilisez Homebrew, vous pouvez installer msmtp en utilisant

brew install msmtp --with-macosx-keyring

Ensuite, le reste est juste une question de mise en place des fichiers de configuration associés

Le premier est /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

Notez que la tls_trust_fileligne doit pointer vers l'endroit où vous avez téléchargé et installé les certificats depuis https://www.thawte.com/roots/index.html .

J'ai mis le mien ~/Dropbox/Thawte Rootspour que je puisse l'avoir sur tous mes Mac.

Ensuite, vous avez besoin d'un ~/.mailrcfichier pour dire où se trouve le binaire msmtp. Si vous utilisez brewce sera /usr/local/bin/msmtpdonc le fichier ressemblerait à ceci:

set sendmail="/usr/local/bin/msmtp"

La dernière étape, mais cruciale, consiste à s'assurer que votre trousseau contient les informations exactement au format que msmtp attendra:

Je pense que cela couvre la plupart des détails. Voir http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ si vous voulez quelques détails supplémentaires.


Évidemment, mes exemples dans le script ci-dessus supposent que vous utilisez Gmail, mais il peut également être utilisé pour d'autres serveurs. Passez example@gmail.comà votre adresse e-mail Gmail ou Google Apps.
TJ Luoma

J'ai finalement pu faire fonctionner cela en utilisant les racines Google disponibles ici: pki.google.com/roots.pem . Si vous êtes bloqué sur des problèmes avec le fichier de confiance et Gmail, cela peut vous débloquer.
codewise

Si vous rencontrez des problèmes avec l'emplacement du fichier de configuration (msmtprc), après l'installation avec Homebrew sur macOS 10.13.3, msmtp l'a recherché dans mon répertoire personnel: ~/.msmtprc
codewise

15

La façon la plus simple d'envoyer du courrier consiste à utiliser une session telnet avec le serveur smtp de votre fournisseur / réseau. Après avoir contacté le serveur et après chaque commande, le serveur répondra s'il accepte la commande avec quelque chose comme "250 OK", ou sinon avec un message d'erreur.

Tous les détails peuvent être trouvés dans RFC2821 - Simple Mail Transfer Protocol, Google pour cela. Cette méthode de base est idéale pour tester pourquoi quelque chose ne va pas lors de l'envoi de courrier, mais je pense qu'il est assez compliqué de l'écrire en preuve complète.

Obtenez d'abord une interface de ligne de commande sur votre ordinateur, en démarrant Terminal. Continuez ensuite avec les commandes suivantes, l'une après l'autre.

Ouvrez une session telnet sur le port 25 du serveur smtp de votre fournisseur / réseau

telnet name_or_ip_of_smtp_server 25

dites bonjour plus le nom Internet de votre fournisseur / réseau, comme abc.com

EHLO name_of_your_network

une adresse from = return est nécessaire, les <et> font partie de la commande

MAIL FROM:<your_email_adress>

donner une ou plusieurs destinations, les <et> font partie de la commande

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

dites au serveur que vous voulez commencer à envoyer des données

DATA

Maintenant, le serveur doit répondre, vous pouvez commencer à envoyer votre courrier et passer en mode données

your data
more data
etc

maintenant terminer les données avec un point comme seul caractère sur une ligne

.

le serveur revient en mode commande pour que vous puissiez quitter

QUIT

13

Cela a fonctionné pour moi, il a été écrit avec Lion à l'esprit mais fonctionne pour Mountain Lion. Btw cela utilise Gmail donc si vous n'êtes pas ...

Vous n'avez pas besoin de télécharger quoi que ce soit! (il suffit de configurer un compte gmail)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Configurer Postfix pour Gmail SMTP Edit file /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

et ajoutez ci-dessous les hôtes de relais commentés: -

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

Générer sasl_password s'il n'existe pas déjà

sudo vim /etc/postfix/sasl_passwd

et entrez les informations suivantes: -

[smtp.gmail.com]:587 username@gmail.com:password

Exécutez les commandes suivantes

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

Et vous avez terminé….
Maintenant, vous devriez pouvoir envoyer des e-mails depuis la ligne de commande, par exemple pour envoyer le contenu d'un répertoire sous forme d'arborescence à une adresse e-mail

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

PS: J'ai obtenu que cela fonctionne très bien lors de l'exécution manuelle de Terminal ou dans des scripts. Cependant, à ce stade, je suis coincé avec le problème que les e-mails ne sont jamais envoyés lorsque launchd lance le script. Je suppose que c'est un problème avec la configuration du travail launchd.
Jonny

Je l'ai fait fonctionner. Voir apple.stackexchange.com/questions/92406/…
Jonny

+1 Merci d'avoir ajouté ceci. M'a vraiment aidé. Tout ce dont j'avais vraiment besoin était l'entrée relayhost dans main.conf (c'est mon propre serveur SMTP sur mon LAN).
boot13

3
Ce qui précède peut être obsolète. J'ai dû ajouter "smtp_sasl_mechanism_filter = plain" selon stackoverflow.com/a/26451135/197789 pour le faire fonctionner. Sinon, j'ai eu une erreur "échec générique".
Von


0

Vous voudrez peut-être consulter postfixconf qui active et configure OS X pour envoyer des e-mails à partir de la ligne de commande (en utilisant votre entrée).

Il est basé sur la configuration postfix bien documentée sur le web ici , ici et ici .


-3

Comme il est basé sur Unix, vous pouvez utiliser la commande sendmail .


-1: sendmail est la commande du serveur SMTP
vartec
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.