E-Mail-Versand an der Kommandozeile
Posted on 04.12.2008 by tc77
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:
$ 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.
$ netcat -v mail.example.com 25
Egal für welche Variante wir uns entscheiden sollten, der Ablauf sieht für beide folgendermaßen aus:
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:
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.
#!/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