Perl: eMails unter Windows verschicken

Im Rahmen von OpenStreetMap erstelle ich das eine oder andere Perl-Skript für die Auswertung von Daten zur Visualisierung und Datenkontrolle. In einer anstehenden Aufgabe sollte von dem Tool automatisch eine eMail verschickt werden wenn es zu Problemen kommt.

Diese Aufgabe selber ist nicht ein unüberwindbares Hindernis wenn man sich in der Linux-Welt bewegen würde. Dafür gibt es ausreichend Dokumentationen. Ich bin aber ein Windows-User und da wird das Eis schon etwas dünner. Insbesondere wenn man die Doku gerne in Deutsch haben möchte. Jetzt habe ich es hinbekommen und möchte daher den “einfachen” Weg dahin nicht verschweigen.

Grundlage bildet ein Programm was die Aufgabe des eMail-Versand übernimmt. Da es in Windows kein Standardprogramm hierfür gibt habe ich auf das bekannte sendmail zurückgegriffen und die Windowsversion heruntergeladen.

Dieses Zip-Archiv wurde entpackt (hier: c:\sendmail). In dem Verzeichnis gibt es eine ini-Datei die entsprechend konfiguriert werden muss. Folgende Parameter wurden gesetzt:

; or to IIS's "pickup" directory. (generally C:\Inetpub\mailroot\Pickup)
; emails delivered via IIS's pickup directory cause sendmail to
; run quicker, but you won't get error messages back to the calling
; application.smtp_server=smtp.myprovide.de

; smtp port (normally 25)

smtp_port=587 (das ist die Einstellung die ich z.b. auch im Thunderbird gesetzt hätte)

; SMTPS (SSL) support
; auto = use SSL for port 465, otherwise try to use TLS
; ssl = alway use SSL

...

; if your smtp server requires authentication, modify the following two lines

auth_username=mein_Benutzername_oder_die_eMail-Adresse
auth_password=erzaehle_ich_nicht
....

Mehr ist für sendmail nicht zu machen. Nun kommt das kleine Beispiel-Perl-Skript (die Quelle finde ich gerade nicht wieder :-()

#!/usr/local/bin/perl
use Mail::Sendmail;

 my %mail = ( To    => 'to@example.org',
            From    => 'from@example.org',
            Message => "This is a very short message"
           );
  $mail{auth} = {user=>'myaccount@example.org', password=>"XXXXXX", required=>1 };

  $mail{Smtp} = 'smtp.example.de'; 
 
 print "vor dem sendmail\n";
  
  sendmail(%mail) or die $Mail::Sendmail::error;

  print "OK. Log says:\n", $Mail::Sendmail::log;

Es kommt das cpan-Paket MIME-Lite (aktuelles Paket ist auf http://search.cpan.org zu finden) aus der Trouchelle.com-Distribution unter ActivePerl 5.10.1 Build 1007 zur Anwendung.

Mit diesen wenigen Zeilen kann ich nun meine eMail automatisch verschicken. Im oberen Teil wird definiert von wonach wo was zu schicken ist und der zweite (wichtige) Teil ist noch anzugeben wo das Script sendmail findet – das ist die Windowspfad-Angabe.

Wenn alles richtig ist, dann sieht das Ergebnis wie folgt aus:

jt_cmd_emai_versandt_20140124

Ich bin zu dem Ergebnis nicht ganz ohne Hilfe durch das Forum der Perl-community.de gekommen. Hierzu sei auf diesen Thread verwiesen.

Hinweis:
Für Schäden die direkt oder indirekt durch die Anwendung dieses Beispiels, wie auch den verwendeten Komponenten, entstehen wird jegliche Haftung ausgeschlossen!

Über TheAuthor

Moin Moin, wie der Norddeutsche sagt. Mein Name ist Jan Tappenbeck. Ich betreibe diesen Blog der über Dinge berichtet die in meinem Umfeld passieren bzw. die mich interessieren. Mein Schwerpunkt liegt hierbei im OpenStreetMap-Umfeld sowie der Modelleisenbahn in Spur Z - blicke aber auch immer mal gerne über den Tellerrand.
Dieser Beitrag wurde unter Allgemein, Programmierung abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.