Mit echo sendmail versenden
sendmail implementiert die Kompatibilitätsschnittstelle von Postfix und ist in fast allen unixoiden Betriebssysteme enthalten, der Mail Transfer Agent, dessen Geschichte bis in die frühen 1980er Jahre zurückreicht.

sendmail versendet E-Mails über das Internet an einen bestimmten Empfänger. Dies kann durch Ausführen des Befehls sendmail
in einer Linux-Kommandozeile erfolgen, und kann auch innerhalb eines Programmierskripts verwendet werden.
sendmail: fatal: open /etc/postfix/main.cf: No such file or directory
Vergewissere dich das sendmail auf dem Linux Host vorhanden ist, mit dem Befehl which sendmail
oder man sendmail
. Falls sendmail nicht gefunden wird, und kein MTA wie Postfix installiert ist, kann sendmail wie folgt bereitgestellt werden.
$ sudo apt install sendmail -y
sendmail in der Kommandozeile
Das folgende Beispiel zeigt ein Linux-Befehl zum Senden einer Nachricht aus der Kommandozeile mit sendmail unter verwendung des echo Befehl.
$ echo -e "Subject:Test Mail using sendmail \nThis is a Test Message\n" | sendmail youremail@example.tld
Der nächste Befehl sendet eine E-Mail mit Absender (From:) Adresse.
$ /usr/sbin/sendmail youremail@example.tld
From: nobody@example.tld
Subject: Test Mail using sendmail
This is a Test Message
.
Der Punkt (.) beendet den Editor und die E-Mail wird versendet.
Mit dem oben gezeigten Beispiel wird interaktiv mit jeder Zeile eine E-Mail erstellt, es soll eine Nachricht mit dem Betreff „Test Mail using sendmail“ im Posteingang von youremail@example.tld zugestellt werden. Die Empfänger E-Mail Adresse entsprechend ändern, vergewissere dich, das sendmail auf dem Host vorhanden ist, und es dem Host erlaubt ist, E-Mails zu versenden.
Weiter eraubt sendmail die Pipeline Anweisung, dabei ist es möglich eine Nachricht mit einer Textdatei zu versenden.
$ /usr/sbin/sendmail < message.txt -t -i youremail@example.tld
Der Inhalt der Textdatei message.txt hier in diesem Beispiel wie folgt.
From: nobody@example.tld Subject: Test Mail using sendmail This is a Test Message
Die sendmail Option -i behandelt das lesen der Nachricht aus der Standard Eingabe ohne Punkt (.) am Zeilenende. Die Option-t Extrahiert die Empfänger aus den Nachrichtenkopfzeilen und wird allen in der Befehlszeile angegebenen Empfängern hinzugefügt.
Datei mit sendmail versenden
Administratoren stehen oft vor der Aufgabe, eine E-Mail direkt von einem Host zu versenden, in diesem Beispiel wird mit sendmail eine Datei als Anhang versendet. Der Zweck hierbei ist es, auf einem Postfix MTA die als SPAM abgewiesenen Zustellversuche „blocked using“ herauszufiltern, und als GZ-Archive zu versenden, dazu muss Postfix auf dem Host konfiguriert sein, es kann auch ein anderer autorisierter MTA sein, oder es wird ein externes SMTP-Relay verwendet.
#!/bin/bash
cat /var/log/maillog* | grep 'blocked using' | grep 'middleton.tld' > /tmp/blocked.txt
gzip -f /tmp/blocked.txt
( echo "to: sysop@example.tld"
echo "from: no_reply@$HOSTNAME"
echo "subject: Report of messages blocked by $HOSTNAME"
echo "mime-version: 1.0"
echo "content-type: multipart/related; boundary=messageBoundary"
echo
echo "--messageBoundary"
echo "content-type: text/plain"
echo
echo "Please find the document attached."
echo
echo "--messageBoundary"
echo "content-type: text/plain; name=blocked.txt.gz"
echo "content-transfer-encoding: base64"
echo
openssl base64 < /tmp/blocked.txt.gz) | sendmail -t -i
Option -t extrahiert die Empfänger aus der Nachrichtenkopfzeile. Mit der Option -i ohne . (Punkt) am Ende der Eingabe.
Fazit
Dieses Beispiel zeigt die Anwendung von sendmail, um eine E-Mail mit Anhang aus der Linux Shell direkt zu versenden. Durch ändern der einzelnen Zeilen können viele weitere Anwendungszwecke zum Zug kommen, dabei die Base64 Kodierung durch openssl vorgenommen wird, die echo Anweisungen erzeugen den MIME-MessageBody.