Partnerlinks:
Google

www.linux-club.de/ sehr aktives und kompetentes Board m. Fragen u. Antworten rund um Linux  |  www.linux-board.de/ privates Board m. Fragen u. Antworten rund um Linux  |  meybohm bei viando.de gute Tools - u.a. "Phase 5 / HTML Editor" mein Lieblings-HTML-Editor und "Proton" - guter Texteditor www.meybohm.de  |  Wunsch-Domain schon belegt? Hier finden Sie sie trotzdem!   |  Webhosting beim Testsieger 2007. www.greatnet.de  | 
Host Europe - World Class Internet Hosting
 

  Ein Pinguin-Logo    
news About Me linux referenz tips links downloads kontakt
 
News
About
Linux
Referenz
Tips
  Linux
  Sicherheit
  Perl
  Allround Server
  Fileserver Samba
  HTTP-Server
  Zope-Server
  SQL-Server
  Mail-Server
  Proxy_Server
  FAX-Server
  Netzwerk-Tools
  SMS-Tools
  Postscript
  MS Office
Links
Downloads
Kontakt

Besucher
seit 21.10.2002
 
Mein Gästebuch
 

MAIL-TO-MESSAGE-GATEWAY mit Perl

Teil 1

1. Allgemeine Beschreibung

1.1. Funktionen

"mail2msg.pl", wie dieses in Perl geschriebene Script richtig heißt, kann in einem Home- oder kleinen bis mittleren Intranet als universelles MAIL-TO-MESSAGE-GATEWAY eingesetzt werden.

Auf die Idee dazu kam ich als für das (sehr gute und funktionale) Groupware-Programm "PHProjekt" ein SMS-Reminder als Add-on herauskam. Dieses verschickt Terminerinnerungen jetzt auch als SMS an den betreffenden User. Dazu nutzt es "Mail-to-SMS" Dienste des Internets (vom User "beizustellen" - fast jeder hat ja bei seinem Mail-Account so etwas dabei).

Da in unserem Intra- und meinem Home-net schon ein "Web-to-SMS-Gateway" (auch nur ein Perl-CGI-Script) erfolgreich mit "YAPS" zusammenarbeitet, suchte ich nach einer solchen Lösung, fand aber nicht so ganz das richtige. Also nahm ich das Script "smsmail.pl" Version 0.1 von Daniel Stenberg und "bastelte" daran herum. Für die gute Vorlage nochmals vielen Dank an ihn.

Die Zur Zeit vorliegende Version 0.1.1 erfüllt folgende Aufgaben:

Eingehende Mails:

  • mit Hilfe von "Yaps" als SMS versenden
  • mit Hilfe von Winpopup Windows-Usern auf den Bildschirm schicken

  • Screenshot (klein) Mail an Mail-to-Winpopup, 1,9 kB
    Screenshot einer Mail an Mail-to-Winpopup

    Screenshot Nachricht in Winpopup erhalten, 7,3 kB
    Screenshot Nachricht in Winpopup erhalten

  • Versenden einer Bestätigungssmail an Absender
  • Versenden einer Fehlermeldungs-Mail an Absender

  • Screenshot (klein) Bestätigungsmail, 3,3 kB
    Screenshot einer Bestätigungsmail
    Screenshot (klein) Fehlermeldungs-Mail, 3,8 kB
    Screenshot einer Fehlermeldungs-Mail

  • einstellbare Länge der Messages) (default=90 Zeichen, da noch Absender und SMS-Serversignatur dazukommen
  • einstellbare Länge einzulesender Zeichen pro Zeile (default=256 Zeichen) der Mail
  • Einstellbare max. Zeilenzahl fürs Einlesen (sollte doch mal eine Mail mit Attachment "auftauchen" - default=40)

Dazu können die Mails folgende Formate aufweisen:

  1. für das Mail-to-SMS-Gateway:
    1. Handy-Nr@sms.your-domain.de
    2. sms@your-domain.de
      Handy-Nr im "Subject" der Mail
  2. für das Mail-to-Winpopup-Gateway:
    1. User-Name@winpopup.your-domain.de
    2. winpopup@your-domain.de
      User-Name im "Subject" der Mail

Das Script ist so aufgebaut, dass relativ einfach andere Messaging-Dienste eingebunden werden können. Zwischen Zeile 300 und 371 sind die bis jetzt implementierten Dienste konfiguriert. Das Script ist sehr gut dokumentiert, ihr werdet euch schnell zurechtfinden. Hier ist eure Phantasie gefragt für welche Dienste es noch genutzt werden kann. Ich hoffe ich höre bald von euch!

1.2. Voraussetzungen

  1. Das Vorhandensein eines funktionienden Mailservers (bei mir läuft sendmail auf SuSE 7.2). Andere Mailserver funktionieren genauso, wenn sie die Verwendung der Mail-Aliase aus /etc/mail/aliases unterstützen.
  2. Für das Mail-to-SMS-Gateway: das Vorhandensein von Yaps sowie seine schon getestete Funktionalität. Dazu findet ihr hier ein paar Tips.
  3. Für das Mail-to-WINPOPUP-Gateway: installierter Samba-Server.
  4. Installiertes Perl - (und ein kleines bißchen Mut um es mal auszuprobieren;-).

1.3. Installation

Als erstes das Script hier herunterladen, die Endung ".txt" entfernen und in ein Verzeichnis eurer Wahl verschieben (bei mir /usr/local/bin).

In diesem Verzeichnis müssen dann der Besitzer, die Gruppe und die Zugriffsrechte angepasst werden:

user group Rechte
daemon nogroup 0600

Sehr gut lässt sich das mit dem MidnightCommander machen: ([Strg+X,O] für user und group, [Strg+X,C] für Berechtigungen). Von Hand geht es mit folgenden Befehlen:

server:~ > cd /usr/local/bin
server:/usr/local/bin > chown daemon:nogroup mail2msg.pl
server:/usr/local/bin > chmod 0600 mail2msg.pl
In diesem Verzeichnis "symbolischen Links" mit "sprechenden" Namen auf das Script Anlegen:
  • Bei SMS -> Tel-Nr. im "Subject": mail2sms_in_subj.pl
  • Bei SMS -> Tel-Nr. im "To": mail2sms_in_to.pl
  • Bei Winpopup -> Tel-Nr. im "Subject": mail2winpop_in_subj.pl
  • Bei Winpopup -> Tel-Nr. im "To": mail2winpop_in_to.pl
Mit dem MC geht dies über [Strg+X,S], von Hand:
server:~ > cd /usr/local/bin
server:/usr/local/bin > ln -s mail2msg.pl mail2sms_in_to.pl

1.4. Konfiguration

1.4.1 Konfiguration des Perl-Scriptes

Im Script selber müssen nur die Variablen im oberen Teil angepasst werden:
  • Namen des Scriptes für die verschiedenen Aufgaben
  • $mail_domain: Die lokale Mail-Domain des Severs/PC's
  • $YAPS_BIN: Pfad zum SMS-Programm YAPS
  • $MAILER: Pfad zum (und evtl. Optionen für...) lokalen SMTP-Mail-Server
  • $PROG_ABS: Mail-Absender des Programmes

  • Jetzt evtl. noch die Nachrichtenlänge u.a. Kleinigkeiten (ist sehr gut im Script dokumentiert)

1.4.2 Erster Test ob alles funktioniert

An dieser Stelle der Arbeit bietet sich ein Test an. Dazu kopiert man sich den Inhalt einer Mail mit Header! in eine einfache Textdatei. Zwischen Header und Body muß eine Leerzeile stehen. So wird auch bei den Mails getrennt. Diese Datei (zum Testen) in das Verzeichnis von "mail2msg.pl" verschieben.

In dieser Mail verändert man nun die Daten im Subject und/oder im To so wie es später auch in der tatsächlichen Mail stehen sollte, bzw. man provoziert Fehler durch weglassen der Angaben nach "From", "To" oder im "Bodys". In den Zeilen [311 und 331] werden die richtigen Versende-Befehle deaktiviert. Daraufhin würde eine Fehlermeldung ausgegben werden, weil kein 0-Return von der Ausführung des Versandbefehls kommt. Deshalb sollte der Wert von $send_response = 0; (in Zeile [292]) gesetzt werden. Wenn keine anderen Fehler auftauchen, sollte das Script jetzt annehmen, dass der Versand ordnungsgmäß abgeschlossen wurde.

Mit folgenden Befehlen testet man:

server:~ > cd /usr/local/bin
server:/usr/local/bin > cat test-mail.txt | ./mail2sms_in_to.pl
Daraufhin solltet ihr eine Bestätigungs-mail an die Absenderadresse gesendet bekommen. Darin steht die Versandbestätigung oder welche(r) Fehler auftrat(en).

1.4.3 Konfiguration am Mail-Servers

Die Hauptarbeit ist eigentlich am Mailserver zu erledigen. Dazu ins Verzeichnis /etc/mail wechseln.
  1. hinzufügen folgender Zeilen zu aliases:
    ### Alles was an User "..." (Teil vor dem @) geht, an
    #   dieses Programm übergeben
    #
    sms:            "|/usr/local/bin/mail2sms_in_subj.pl"
    mail2sms:       "|/usr/local/bin/mail2sms_in_to.pl"
    winpopup:       "|/usr/local/bin/mail2winpop_in_to.pl"
    
    abspeichern und mit "newaliases" "/etc/newaliases.db" aktualisieren
  2. hinzufügen folgender Zeilen zu virtusertable:
    ### Alles was an Adresse "..." geht, an diesen
    #   User (in Aliases definiert) weiterleiten
    #
    @sms.your-domain.de        mail2sms
    sms@your-domain.de         sms
    @winpopup.your-domain.de   winpopup
    
    abspeichern und mit "makemap hash virtusertable.db < virtusertable" neue ".db"-Datei erstellen
  3. (bei SuSE) entweder in /etc/rc.config.d/sendmail.rc.config bei "sendmail_localhost" folgende Domains ergänzen: sms.your-domain.de winpopup.your-domain.de und danach "SuSEconfig --modules sendmail" aufrufen oder diese untereinander in /etc/mail/sendmail.cw eintragen
Als letzter Schritt steht ein Neustart oder Reload des Mailservers an: rcsendmail restart oder rcsendmail reload

Von da ab sollte alles funktionieren. Das testet man am besten gleich mit ein paar Mails (wobei aus Kostengründen der SMS-Versand weiter deaktiviert bleiben sollte). Mittels tail -f /var/log/mail auf einer anderen Konsole erkennt man Probleme des Mail-Servers relativ schnell. Funktioiert dies alles zufriedenstellend werden die Kommentare vor dem SMS-Versand entfernt sowie die Variable $send_response = 1; gesetzt.

1.5. Probleme

Dieses Script ist relativ einfach aufgebaut (ohne Verwendung von Modulen). Deshalb erfolgt keine MIME-gerechte Verarbeitung der eingehenden Mails. Das kann dazu führen, dass verschiedene Sonderzeichen nicht richtig behandelt (je nach Mail-Server) oder weitergegeben werden können. Weitere Probleme sind mir bisher nicht bekannt, wenn ihr aber welche findet mailt mir mit einer aussagefähigen Beschreibung wann und unter welcher Konstellation es zum Fehler kam. Soweit es meine (doch sehr knappe:-() Zeit zulässt werde ich mir das ansehen und versuchen zu helfen.

1.6. Wie weiter?

Ich hoffe euch ein paar Anregungen gegeben zu haben und würde mich über weitere Funktionen für dieses Script freuen. Ich selbst werde mich irgendwann mal mit den Perl-Modulen zum Mail-Handling beschäftigen müssen, damit manches noch einfacher gehen könnte, es fehlt bloß immer wieder die nötige Zeit.

Sobald mich die Langeweile packt ;-) versuche ich in einem zweiten Teil die einzelnen Funktionen des Perl-Scriptes näher zu erläutern, so dass auch andere Perl-Anfänger (wie ich ja auch einer bin) verschiedene Vorgehensweisen besser verstehen können und so Anregungen für eigene Programmierversuche bekommen. Bis dahin müsst ihr euch mit der Dokumentation im Script selbst begnügen, die ich eigentlich reichlich gestreut habe;-).


   

MAIL-TO-Message Gateway mit Perl

Funktion
Voraussetzungen
Installation
Konfiguration
Testen
Mail-Konfiguration
Probleme
Wie weiter?
 
©  09.09.2009  Heiko Teichmeier - Glauchau/Sa.