Wie sende ich eine E-Mail von der Kommandozeile aus?

28

Wie sende ich eine E-Mail über die Befehlszeile oder das Skript? Ich möchte das Skript programmgesteuert ausführen können, indem ich den Empfänger und die Nachricht übergebe.

Michelemarcon
quelle
Wenn Sie ein Programm schreiben, haben viele Sprachen Bibliotheken, die sich mit E-Mail beschäftigen
user151019

Antworten:

21

mail -s subject [email protected] Geben Sie Ihre Nachricht ein und drücken Sie, um den Vorgang Ctrl+Dzu beenden

vartec
quelle
11
Wenn Sie Ihr System nicht so konfiguriert haben, dass es angibt, wohin E-Mails gesendet werden sollen, werden E-Mails wahrscheinlich nicht gesendet, sondern stapeln sich nur auf meinem Mac.
TJ Luoma
15
-1: Diese Antwort ist unvollständig. Sofern das System nicht vor der Ausführung dieses Befehls konfiguriert wurde, wie @TJLuoma feststellte, funktioniert dieser Befehl nicht.
Melvynkim
1
TJ Luoma und melvkim sind falsch: Ein standardmäßiges OS X-System verschickt problemlos E-Mails, ohne dass eine Konfiguration erforderlich ist. Der OS X-Computer fungiert als eigener SMTP-Server, sucht im DNS MX nach der Zieldomäne und sendet die E-Mails dorthin.
JohnEDee
2
@patrix, Richtig, verwendet den langen Benutzernamen des angemeldeten Kontos und die vom Mac selbst generierte ".local" -Adresse, um ein "Von" zu bilden. Ich benutze es die ganze Zeit für Benachrichtigungs-E-Mails an mich und meine Mitarbeiter aus Prozessen mit Shell-Skripten. TJ Luoma und melvkim sagten, dass es "nicht funktionieren wird" und "tatsächlich keine E-Mails senden", jedoch sind beide falsch.
JohnEDee
1
@RamarajT, ja, Sie können die Ausgabe des Befehls echo an mail weiterleiten, und es ist dann kein Cmd-D erforderlich. Zum Beispiel: echo This will be the body of the email | mail -s "This is the Subject" [email protected]
JohnEDee
25

Mir sind zwei Programme bekannt, mit denen Sie Ihren Mac problemlos so konfigurieren können, dass E-Mails über die Befehlszeile gesendet werden.

Ich habe für beide HOWTOs geschrieben:

Von den beiden schlage ich vor msmtp.

Die Konfiguration ist so kompliziert, dass ich nicht sicher bin, ob ich alle Schritte hier replizieren soll, aber ich werde erwähnen, dass Sie msmtp installieren können , wenn Sie Homebrew verwenden

brew install msmtp --with-macosx-keyring

Der Rest ist nur eine Frage des Einrichtens der zugehörigen Konfigurationsdateien

Das erste ist /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

Beachten Sie, dass die tls_trust_fileZeile auf die Stelle verweisen sollte, an der Sie die Zertifikate von https://www.thawte.com/roots/index.html heruntergeladen und installiert haben .

Ich habe meine in ~/Dropbox/Thawte Rootsso, dass ich es auf allen meinen Macs haben kann.

Dann benötigen Sie eine ~/.mailrcDatei, um anzugeben, wo sich die msmtp-Binärdatei befindet. Wenn Sie es verwenden brew, /usr/local/bin/msmtpsieht die Datei folgendermaßen aus:

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

Der letzte, aber entscheidende Schritt besteht darin, sicherzustellen, dass Ihr Schlüsselbund die Informationen genau in dem von msmtp erwarteten Format enthält:

Ich denke, das deckt die meisten Details ab. Weitere Informationen finden Sie unter http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/ .

TJ Luoma
quelle
Offensichtlich setzen meine Beispiele im obigen Skript voraus, dass Sie Google Mail verwenden, aber es kann auch für andere Server verwendet werden. Ändern Sie [email protected]Ihre Google Mail- oder Google Apps-E-Mail-Adresse.
TJ Luoma
Mit den hier verfügbaren Google Roots konnte ich dies endlich zum Laufen bringen : pki.google.com/roots.pem . Wenn Sie Probleme mit der Vertrauensdatei und Google Mail haben, kann dies die Blockierung für Sie aufheben.
Codewise
Wenn Sie Probleme mit dem Speicherort der Konfigurationsdatei (msmtprc) haben, hat msmtp nach der Installation mit Homebrew unter macOS 10.13.3 in meinem Home-Verzeichnis danach gesucht: ~/.msmtprc
codewise
15

Die einfachste Methode zum Senden von E-Mails ist eine Telnet-Sitzung mit dem SMTP-Server Ihres Providers / Netzwerks. Nachdem Sie den Server kontaktiert haben und nach jedem Befehl antwortet der Server, wenn er den Befehl mit "250 OK" annimmt oder wenn keine Fehlermeldung angezeigt wird.

Alle Details finden Sie in RFC2821 - Simple Mail Transfer Protocol, Google dafür. Diese grundlegende Methode eignet sich hervorragend zum Testen, warum beim Versenden von E-Mails etwas schief geht, aber ich denke, es ist ziemlich kompliziert, das Skript vollständig zu prüfen.

Rufen Sie zuerst eine Befehlszeilenschnittstelle auf Ihrem Computer auf, indem Sie Terminal starten. Fahren Sie dann nacheinander mit den folgenden Befehlen fort.

Öffnen Sie eine Telnet-Sitzung zu Port 25 des SMTP-Servers Ihres Providers / Netzwerks

telnet name_or_ip_of_smtp_server 25

Sagen Sie Hallo und den Internetnamen Ihres Providers / Netzwerks, wie z. B. abc.com

EHLO name_of_your_network

Es wird eine Absenderadresse von = benötigt, die <und> sind Teil des Befehls

MAIL FROM:<your_email_adress>

Geben Sie ein oder mehrere Ziele an. Die <und> sind Teil des Befehls

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

Teilen Sie dem Server mit, dass Sie Daten senden möchten

DATA

Nun sollte der Server antworten, Sie können mit dem Versenden Ihrer E-Mails beginnen und gehen in den Datenmodus

your data
more data
etc

Beenden Sie jetzt Daten mit einem Punkt als Zeichen in einer Zeile

.

Der Server kehrt in den Befehlsmodus zurück, damit Sie ihn beenden können

QUIT
Henry vM
quelle
13

Dies funktionierte für mich, es wurde für Lion geschrieben, funktioniert aber für Mountain Lion. Übrigens verwendet Google Mail, wenn Sie nicht ...

Sie müssen nichts herunterladen! (Richten Sie einfach ein Google Mail-Konto ein.)

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

Konfigurieren Sie Postfix für Gmail SMTP. Bearbeiten Sie die Datei /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

und füge im Folgenden die auskommentierten Relayhosts hinzu: -

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

Generieren Sie sasl_password, falls es noch nicht existiert

sudo vim /etc/postfix/sasl_passwd

und geben Sie Folgendes ein: -

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

Führen Sie die folgenden Befehle aus

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

Und du bist fertig ...
Nun sollten Sie in der Lage sein, E-Mails über die Befehlszeile zu senden, um beispielsweise den Inhalt eines Verzeichnisses als Baum an eine E-Mail-Adresse zu senden

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com
Jonny
quelle
PS: Ich habe das großartig gemacht, wenn ich es manuell über Terminal oder in Skripten ausgeführt habe. An dieser Stelle habe ich jedoch das Problem, dass E-Mails nie gesendet werden, wenn launchd das Skript startet. Ich denke, es ist ein Problem mit der Einrichtung des Startauftrags.
Jonny
Ich habe es geschafft. Siehe apple.stackexchange.com/questions/92406/…
Jonny
+1 Danke, dass du das hinzugefügt hast. Hat mir wirklich geholfen. Alles, was ich wirklich brauchte, war der Relayhost-Eintrag in der main.conf (es ist mein eigener SMTP-Server in meinem LAN).
boot13
3
Das oben Genannte ist möglicherweise nicht mehr aktuell. Ich musste "smtp_sasl_mechanism_filter = plain" gemäß stackoverflow.com/a/26451135/197789 hinzufügen , damit es funktioniert. Ansonsten habe ich einen "generic failure" Fehler bekommen.
Vom
0

Möglicherweise möchten Sie postfixconf auschecken , mit dem OS X zum Senden von E-Mails über die Befehlszeile aktiviert und konfiguriert wird (unter Verwendung Ihrer Eingabe).

Es basiert auf der Postfix-Konfiguration, die hier , hier und hier im Web gut dokumentiert ist .

Rubel
quelle
-3

Da es auf Unix basiert, können Sie den Befehl sendmail verwenden .

Pierre Watelet
quelle
-1: sendmail ist der SMTP-Server-Befehl
vartec