E-Mails von der Kommandozeile aus versenden
Der Mail-Befehl ist ein wesentlicher Befehl, der auf jedem Linux-Server verfügbar sein sollte, damit verschiedene Dienste und andere Webanwendungen E-Mails generieren und übertragen können.
In einem früheren Beitrag zum Mail-Befehl haben wir gesehen, wie der Mail-Befehl verwendet werden kann, um E-Mails von der Befehlszeile auf Ihrem Linux-Server zu senden.
In diesem Tutorial verwenden wir eine erweiterte Version des Mail-Befehls. Es heißt mailx (oder einfach mail, wenn es installiert ist) und kann viel mehr tun als der ältere mail-Befehl aus dem gnu mailutils-Paket.
Wie funktioniert es
Der Befehl mail/mailx benötigt einen laufenden lokalen SMTP-Server (MTA), um die E-Mails zuzustellen. Der von der E-Mail eingeschlagene Weg sieht in etwa so aus -
mail -> sendmail -> local MTA -> recipient MTA [Inbox]
Der Empfänger-MTA wäre der SMTP-Server von Google Mail, wenn Ihr Empfänger beispielsweise jemand bei gmail.com ist. Für den lokalen MTA müssen Sie einen SMTP-Server wie Postfix installieren. Eine Basisinstallation von Postfix mit minimaler Konfiguration würde in den meisten Fällen funktionieren.
Installieren Sie den mailx-Befehl
Auf Ubuntu/Debian-basierten Systemen ist der mailx-Befehl in 2 verschiedenen Paketen verfügbar -
1. Erbstück-Mailx
2. bsd-mailx
Wir werden das heirloom-mailx-Paket verwenden, weil es mehr Funktionen und Optionen hat.
Auf CentOS/Fedora-basierten Systemen gibt es nur ein Paket namens "mailx", das das heirloom-Paket ist.
Um herauszufinden, welches Mailx-Paket auf Ihrem System installiert ist, überprüfen Sie die Ausgabe von "man mailx" und scrollen Sie bis zum Ende herunter, und Sie sollten einige nützliche Informationen sehen.
# ubuntu/debian $ sudo apt-get install heirloom-mailx # fedora/centos $ sudo yum install mailx
Mit dem mailx-Befehl
Nach der Installation kann auf den mailx-Befehl direkt mit dem Namen mail verwiesen werden, also geben Sie diesen einfach in die Befehlszeile ein.
1. Einfache E-Mail
Führen Sie den folgenden Befehl aus, und dann wartet mailx darauf, dass Sie die Nachricht der E-Mail eingeben. Sie können die Eingabetaste für neue Zeilen drücken. Wenn Sie mit der Eingabe der Nachricht fertig sind, drücken Sie Strg+D und mailx zeigt EOT.
anDanach liefert mailx die E-Mail automatisch an das Ziel.
$ mail -s "This is the subject" [email protected] Hi someone How are you I am fine Bye EOT
2. Nachricht aus einer Datei übernehmen
Der Nachrichtentext der E-Mail kann auch aus einer Datei entnommen werden.
$ mail -s "This is Subject" [email protected] < /path/to/file
Die Nachricht kann auch mit dem echo-Befehl -
weitergeleitet werden$ echo "This is message body" | mail -s "This is Subject" [email protected]
3. Mehrere Empfänger
Um die E-Mail an mehrere Empfänger zu senden, geben Sie alle E-Mails durch ein Komma getrennt ein
$ echo "This is message body" | mail -s "This is Subject" [email protected],[email protected]
4. CC und BCC
Die Optionen „-c“ und „-b“ können verwendet werden, um CC- bzw. BCC-Adressen hinzuzufügen.
$ echo "This is message body" | mail -s "This is Subject" -c [email protected] [email protected]
5. Name und Adresse des Absenders angeben
Verwenden Sie die Option „-r“, um einen „FROM“-Namen und eine Adresse anzugeben. Dem Namen sollte die Adresse folgen, die in "<>".
eingeschlossen ist$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" [email protected]
6. "Reply-To"-Adresse angeben
Die Antwortadresse wird mit der internen Optionsvariable "replyto" mit der Option "-S" gesetzt.
# 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. Anhänge
Anhänge können mit der Option "-a" hinzugefügt werden.
$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" -a /path/to/file [email protected]
8. Externen SMTP-Server verwenden
Dies ist eine exklusive Funktion, die Sie nur mit heirloom mailx und nicht mit bsd mailx oder dem mail-Befehl von gnu mailutils oder dem mutt-Befehl erhalten.
Der Befehl mailx kann einen externen SMTP-Server verwenden, um die Nachricht weiterzuleiten. Die Syntax ist etwas langatmig, aber sinnvoll.
$ 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]
Hier ist eine Aufschlüsselung
$ 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]
Sie können die SMTP-Server von Google Mail verwenden und E-Mails über Ihr Google Mail-Konto senden. Das ist so cool!
Speziell für Google Mail müssten Sie weniger sichere App-Einstellungen aktivieren, bevor Sie solche E-Mails senden können.
9. Ausführlich - SMTP-Kommunikation beobachten
Wenn Sie externe SMTP-Server verwenden, können Sie die gesamte SMTP-Kommunikation überwachen, die im Hintergrund ausgeführt wird. Dies ist besonders beim Testen oder Debuggen von SMTP-Servern nützlich.
$ 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
Fehlerbehebung
Falls die Mails nicht richtig zugestellt werden, müssen Sie einige Dinge überprüfen. Prüfen Sie zunächst, ob lokal ein SMTP-Server (MTA) läuft. Das kann der netstat-Befehl erkennen
$ 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
Wenn ein stmp-Server wie Postfix läuft und die Mails immer noch nicht gehen, dann versuchen Sie zum Beispiel, Postfix neu zu konfigurieren. Auf Ubuntu/Debian-Systemen kann dies mit dem Befehl dpkg-reconfigure
erfolgen$ sudo dpkg-reconfigure postfix
Versuchen Sie dann den Mail-Befehl erneut und es sollte funktionieren. Wenn dies immer noch nicht der Fall ist, wenden Sie sich an Ihren Serveranbieter.
Keine Mails von lokalen Systemen
Wenn Sie versuchen, E-Mails von Ihrem lokalen Computer an eine Gmail-Adresse zu senden, wird Ihre E-Mail höchstwahrscheinlich abgelehnt, also versuchen Sie das nicht.
Dies liegt daran, dass gewöhnliche Computer, die mit einer Internetadresse verbunden sind, eine IP-Adresse haben, die keiner gültigen Domain als solcher zugeordnet ist, und Google Mail diese Anmeldeinformationen streng überprüft, bevor E-Mails zugelassen werden.
Hinweise und Ressourcen
Abgesehen von mailx gibt es andere Tools wie Swaks und smtp-cli, die verwendet werden können, um E-Mails von der Befehlszeile aus zu senden und verschiedene Funktionen wie das Festlegen von SMTP-Servern und das Hinzufügen von Anhängen usw. zu unterstützen.
Der Befehl mailx ist jedoch in den Standard-Repositories der meisten gängigen Distributionen verfügbar und kann daher einfach installiert werden. Außerdem behält es eine Syntax bei, die der des Mail-Befehls sehr ähnlich ist, was es zu einem Ersatz für den älteren Mail-Befehl macht.
Der Befehl mailx ist sogar in der Lage, Mails von entfernten IMAP-Servern zu lesen, aber das haben wir aus diesem Beitrag herausgehalten und werden später darauf eingehen. Weitere Informationen finden Sie in der Manpage für den mailx-Befehl mit "man mailx".