E-Mail-Versand an der Kommandozeile

Um eine E-mail über die Kommandozeile ins freie zu entlassen bieten sich verschiedene Möglichkeiten, welche ich kurz hier aufführen möchte.

Die simpelste Variante stellt eine Verbindung zum Mail-Server via telnet auf Port 25 dar:

1
$ telnet mail.example.com 25

Auf den meisten Systemen wird telnet aus vielfältigen Gründen allerdings nicht vorhanden sein, weshalb es noch die Möglichkeit zur Nutzung von netcat gibt.

1
$ netcat -v mail.example.com 25

Egal für welche Variante wir uns entscheiden sollten, der Ablauf sieht für beide folgendermaßen aus:

1
2
3
4
Trying mail.example.com...
Connected to mail.example.com.
Escape character is '^]'.
220 mail.exmaple.com ESMTP

Wir begrüßen den Mailserver mit HELO client.exmaple.com. Worauf uns der Mailserver mit 250 mail.example.com willkommen heisst.

Anschließend teilen wir unserem dienstbaren Freund mit MAIL FROM:<janedoe@exmaple.com> mit von wem unsere E-Mail stammt. Als Bestätigung erhalten wir ein 250 ok.

Nun teilen wir dem Mail-Server noch mit an wen wir unsere Post richten möchten: RCPT TO:<johndoe@example.com>. Falls der Empfänger dem Mail-Server genehm sein sollte erhalten wir wieder ein 250 ok.

Nachdem wir die Formalitäten hinter uns gebracht haben geben wir unser Mitteilungsbedürfnis mit DATA preis. Gespannt meldet sich der Mail-Server mit einem 354 go ahead zurück und wartet freudig auf unsere Nachricht:

1
2
3
4
5
6
subject: Heyhoo
Hallo John!
Toll Dich kennengelernt zu haben.
Liebe Grüße
Jane
.

Die Kenntnisnahme unserer Nachricht bekommen wir mit 250 ok 1229451861 qp 18424 vom Mail-Server quittiert, worauf wir uns mit einem QUIT verabschieden und von dannen ziehen.

Für die Verwendung in Shell-Skripten gibt es noch folgenden Schnipsel, welcher die o.g. Kommandos noch mal schön zusammenfasst.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/env bash
netcat localhost 25 << EOF
HELO client.example.com
MAIL FROM: <janedoe@example.com>
RCPT TO: <johndoe@example.com>
DATA

.
QUIT
EOF