Ohne Mailserver emails per shell script versenden (SMTP over TLS)

Das Programm “sendEmail” versendet E-Mails auf der Kommandozeile per SMTP via TLS-Verschlüsselung und kommt dabei ohne Mailserver aus.

AROBAZE web.de ubuntu TLS SSL SMTP shell sendmail sendEmail script open source mail linux jaunty email cron bash admin

Lizenz: GFDL 1.2

Wer auf der Kommandozeile bzw. scriptgesteuert emails versenden will, der tut dies meist mit Hilfe eines Mailservers. Ein Mailserver wie sendmail ist jedoch nur mit einem nicht unerheblichen Aufwand aufzusetzen und zu warten. Darüberhinaus kann er – gerade auf Servern – ein Sicherheitsrisiko bedeuten.

In diese Bresche springt das Programm “sendEmail”, mit dem auch Dateianhänge versandt werden können. Der Einsatzbereich dieses kleinen Programms, das in perl geschrieben ist, ist vielfältig. So könnten z.B. Warnmails an den Administrator versandt werden, wenn:

  • sich der Speicherplatz einer Festplatte seiner Maximalkapazität nähert
  • bestimmte Schlüsselbegriffe in den Logdateien auftauchen
  • ein Passwort mehrmals falsch eingegeben wurde.

Geübte Shellscripter können mit “sendEmail” (immer das große “E” benutzen!) den Eintritt eines beliebigen Ereignisses mit dem Versand einer email verknüpfen. Die folgenden Informationen gelten für ein System “Ubuntu Jaunty Jackalope” und einen email-Account bei web.de, sollten jedoch auch grundsätzlich für andere Systeme gelten.

Installation: Neben “sendEmail” werden folgende Pakete benötigt:

libio-socket-ssl-perl, libnet-ssleay-perl, perl

Unter Ubuntu werden alle benötigten Pakete  aus den Paketquellen installiert:

sudo apt-get install sendEmail libio-socket-ssl-perl libnet-ssleay-perl perl

Infos zur Installation des Tarballs finden sich auf der sendEmail Homepage.

Mails senden: Zum Versenden einer Mail muss man sich zunächst für einen SMTP-fähigen email-Account mit TLS-Unterstützung registriert haben. Eine reguläre email-Adresse bei web.de erfüllt diesen Zweck. Dabei bitte beachten, dass das Passwort zwar verschlüsselt übertragen wird, jedoch in der Bash-History bzw. im Shellscript im Klartext aufzufinden sind. Eine eigene Email-Adresse nur zu diesem Zweck zu registrieren, scheint also empfehlenswert. Im folgenden Beispiel wird die fiktive Adresse “username@web.de” verwendet. Die Mail wird per SMTP an web.de gesendet und von hier an die Empfangsadresse weitergeleitet. Am folgenden Beispiel soll verdeutlicht werden, wie “sendEmail” eine mail versendet:

sendEmail -v -f username@web.de -s smtp.web.de:25 -xu username -xp totalgeheim -t adminempfaenger@gmx.de -o tls=yes -u "Betreff: Test!" -m "Hallo, dies ist ein Test!"

Die Optionen im Einzelnen:

-v   verbose: geschwätziger Modus (hilfreich zur Fehlersuche)
-f    from: die Absenderadresse, von der die mail versandt werden soll (hier: username@web.de)
-s    server&port: Der zuständige SMTP-Server samt Portangabe
-xu    username: Der Benutzername. (Manche Provider erwarten hier die komplette Emailadresse)
-xp    password (SMTP): bei web.de das reguläre Benutzerpasswort
-t    to: Empfängeradresse
-cc    Kopie der Mail senden an: 2. Emailadresse
-bcc    Versteckte Kopie der Mail senden an: 2. Emailadresse
-o    hier: tls=yes – sorgt für eine verschlüsselte TLS-Übertragung
-u    subject: Betreffzeile
-m    message: Inhalt der Email
-a    attachment: Pfad zu Dateianhang, der mitgesendet werden soll

Weiterführende Infos: Mit einem gmx-Account ist es mir nicht gelungen, mit sendEmail mails zu versenden (“Segmentation fault”). Wer weiß woran es hapert, kann gerne einen Kommentar hinterlassen. Ach ja: sendEmail scheint im Moment nur TLS, nicht aber SSL zu unterstützen. Ein schönes (englischsprachiges) Beispiel, wie man sich täglich Logdateien per email aus einer Kombination von sendEmail, shellscripting und cronjob senden lassen kann, ist in diesem Tutorial beschrieben, das kürzlich erschienen ist. Die sendEmail Homepage mit allen Optionen und mehr Informationen ist hier: sendEmail Homepage

Comments

  1. Ich glaube bei GMX ist es nötig sich vor dem Versenden von Mails eingeloggt zu haben um Mails zu abzurufen. Bin mir aber nicht sicher.

  2. Installation unter Gentoo:
    flobian@gentux ~ $ sudo emerge net-mail/sendEmail -av

    These are the packages that would be merged, in order:

    Calculating dependencies… done!
    [ebuild N ] dev-perl/Net-SSLeay-1.35 130 kB
    [ebuild N ] dev-perl/IO-Socket-SSL-1.26 USE=”-idn” 64 kB
    [ebuild N ] net-mail/sendEmail-1.55 USE=”ssl” 27 kB

    Total: 3 packages (3 new), Size of downloads: 220 kB

    Would you like to merge these packages? [Yes/No] yes

  3. Nachteil dieser sendmail-Script-Lösungen ist, dass diese keine Mail-Queue haben. Ist zum Zeitpunkt des Mailversands der zuständige SMTP-Server nicht erreichbar (aus welchen Gründen auch immer), verschwindet die Nachricht im Nirvana.
    Mit einem richtigen SMTP-Server passiert das natürlich nicht. Wieso ein Mailserver der nur lokal E-Mails annimmt ein Sicherheitsrisiko sein soll verstehe ich auch nicht ganz, muss für dieses Szenario doch überhaupt keinen inet smtpd ausgeführt werden.

  4. ich habe mal direkt mit telnet versucht, über gmx ne mail zu senden. nach HALO smtp oder so (also ziemlich früh schon) kam die meldung, dass es mit smtp nicht geht, sondern nur über smtp-auth

Comments are closed