supergarv

Garvin Hicking :: blog

A Chinese Proverb: Yuck Fou!

  •  
  •  
  • Über mich
  •  
  • Galerie
  •  
  • Freunde
  •  
  • Tops und Flops
  •  
  • Links
  •  
Zufallsbild
  • Über mich:
  • Vorstellung
  • Lebenslauf
  • Lebensziele
  • Gästebuch
  • Kontakt
  • News
  • Blog
  • Galerie:
  • Artwork
  • Logos
  • Web
  • DTP
  • 3D
  • Fotos
  • Videos
  • Anderes
  • Freunde:
  • Freunde
  • Familie
  • Ich
  • Webcam
  • Schule
  • Caritas
  • Arbeit
  • Anderes
  • Tops und Flops:
  • Filmkritiken
  • Texte
  • IMDB
  • Hitlisten

Handbuch für Serendipity


Das offizielle, umfassende Serendipity-Handbuch für Einsteiger und Profis ist nun im Handel und kann online bei Amazon oder Open Source Press bestellt werden, oder auch bei jedem Buchhändler.

Kategorien

  • Blafasel
  • Media
  • Bilder
  • Bücher
  • Kino / Video
  • Sneak Preview
  • Musik
  • Spiele
  • PHP / Software
  • Planung

Alle Kategorien

Fotografie von Garvin und Emba

» bei Model-Kartei
» bei Flickr

Flickr: Bilder

Medaillen

superBlog Banner
OPML: Meine Feeds (RSS)
Suprglu: Meta-Feed
Blogverzeichnis - Blog Verzeichnis bloggerei.de
FOAF-Explorer: Meine FOAFs ansehen

Jabber: supergarv (at) amessage.de
ICQ: 21392242

:inlove:

Macht mich glücklich:

Wunschliste Amazon / Wishlist Amazon
PayPal

Blog abonnieren

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare
  • superBlog

Archive

  • Juli 2010
  • Juni 2010
  • Mai 2010
  • Das Neueste ...
  • Älteres ...

Powered by

Serendipity PHP Weblog

« Schlag den Boll | Startseite | « Nikon D80 »

Mittwoch, 9. August 2006

Jabber E-Mail Notify

In letzter Zeit ging es mir sehr auf die Nerven, ständig das s9y-Forum als auch meine E-Mails ab und zu zu überprüfen um herauszufinden ob es neue Beiträge/Mails gab.

Da musste also eine Alternative her. Wenn ich am PC sitze, läuft üblicherweise immer auch Trillian mit. Dadurch bin ich mit ICQ, MSN und Jabber verbunden. Da Jabber ein offenes Protokoll ist, bietet sich das für solche Spielereien natürlich an.

Meine E-Mails werden von meinem kleinen Heimserver ständig auf einem Linux-Rechner gepollt. Da ist also die .procmail prädestiniert für einen E-Mail-Notification Push-Dienst. Am Ende meiner .procmailrc habe ich also lediglich:

CODE:
:0c
|php /home/www/jabber.php


eingetragen. Das weist den MTA dazu an, eine Kopie der aktuellen Mail an den Notifier zu schicken. Wohlgemerkt ganz am Ende, wenn der ganze Spam schon größenteils rausgefiltert wurde ;)

Als weiteres braucht man natürlich ein neue Jabber-ID, die der Bot nutzen kann um meinem richtigen Jabber-Account eine Message zu schicken. Das ist aber kein Problem, da man mittels Jabber-Protokoll und einem Jabber-Client einfach einen neuen Account wie "garvbot@jabber.org" erstellen kann.

Nun bedarf es noch besagter jabber.php. Diese setzt die Klasse class.jabber.php ein. Ursprünglich habe ich die aktuelle Version ausprobiert, die aber mit den Jabber-Servern Authentifikations-Probleme machte ("501 not supported"). Da ich gerade kein XMPP lernen wollte, habe ich einfach die ältere Version 0.4.2 eingesetzt, die soweit für meine Zwecke problemlos funktioniert. Diese Datei wird also mit in mein /home/www Verzeichnis gepackt, und die jabber.php sieht wie folgt aus (Code-Kommentare beachten!):

CODE:
<?php
// Da diese Datei auch evtl. per HTTP angesprochen wird, soll das Script nicht abbrechbar sein
ignore_user_abort(true);

// class.jabber.php einbinden
require_once "class.jabber.php";

// Ein neues JABBER Objekt erstellen, mit den gewünschten Zugangsdaten.
$jabber = new Jabber();
// Servername für den Account
$jabber->server = 'jabber.org';
// Username für den Account
$jabber->username = 'garvbot';
// Klartext-Passwort für den Account
$jabber->password = 'passwort';
// Die Ressource klassifiziert lediglich einen Account, ist also nur ein Hilfsmerkmal
$jabber->resource = 's9yNotificationBot';
// Logging für Probleläufe
$jabber->enable_logging = true;
// Der Empfänger für meine Nachrichten
$jabber->to = 'garv@schokokeks.org';


// Der Jabber-Verbindungsaufbau dauert gut 15-20 Sekunden. Um ein Amoklaufen der Scripte zu verhindern,
// wird ein "Lockfile" erstellt. Nur wenn dieses nicht existiert oder älter als 2 Minuten ist, darf
// der Bot seine Nachricht schicken. Dies bedeutet auch, dass das PHP-Script in der Lage sein muss,
// auf den Ordner in dem es sich befindet eine Datei erstellen zu können! (chmod 777 o.ä.)
if (!file_exists('active') || filemtime('active') < time()-120) {
    // Altes Lockfile löschen
    @unlink('active');

    // Neues lockfile erstellen und Zugriffsrechte setzen
    $fp = fopen('active', 'w');
    fwrite($fp, time());
    fclose($fp);
    chmod('active', 0777);

    // Jabber-Verbindung herstellen
    $jabber->Connect();
    $jabber->SendAuth();

    // Die Eingabe bezieht das Script entweder von einem Konsolen-Aufruf, von einer REQUEST-Variable
    // oder aus stdin. Beim Mailnotify kommt die Eingabe immer von stdin.
    if ($argv[1]) {
        $msg = $argv[1];
    } elseif ($_REQUEST['msg']) {
        $msg = urldecode($_REQUEST['msg']);
    } else {
        // stdin öffnen. Nur die ersten 4096 Zeichen lesen, wir wollen ja eh nicht so viel schicken
        $stdin = fopen('php://stdin', 'r');
        $msg   = fread($stdin, 4096);

        if (empty($msg)) {
            $msg = "empty";
        } else {
            // FROM und SUBJECT der E-Mail auslesen.
            preg_match('@From:(.*)@i', $msg, $m1);
            preg_match('@Subject:(.*)@i', $msg, $m2);
            $msg = "E-Mail: " . $m1[1] . "\n" . $m2[1];
        }
    }

    // Jabber muss escaptes HTML senden. Sicherheitshalber schicken wir nur 512 Zeichen.
    $msg = htmlspecialchars(substr($msg, 0, 512));

    // Nachricht senden
    $jabber->SendMessage($jabber->to, "normal", NULL, array("body" => $msg));

    // Lockfile löschen
    @unlink('active');
} else {
    // Dieser Fall tritt ein, wenn ein anderer Prozess noch läuft
    echo 'Discarded';
}


Selbiges Script habe ich ins s9y Forum in die "posting.php" Datei eingehackt. Dort wird ein iframe erzeugt, der die jabber.php Datei auslöst. So wird der Client nicht mit dem 15-20 Sekunden "Timeout" belästigt.

Was an dieser Art der Notification cool ist: Es ist ein "Push" statt einem "Pull". Ich werde quasi ohne Aktivität benachrichtigt, im Gegensatz zu existierenden Plugins die POP3/IMAP-Postfächer abrufen. Ausserdem ist es besser als SMS-Notification, weil ich mittels Jabber-Client auf dem Handy auch kontrollieren kann, wann ich notified werden will. Schließlich nervt es, nachts SMSe zu empfangen. :-)

Ein kleines Problem hat das Script noch: Es kann keinen "Presence"-Check der Gegenstelle machen. Optimalerweise würde ich gerne nur dann Notifications erhalten, wenn ich auch online bin. Denn eine Riesen-Queue von Offline-Nachrichten zu empfangen, finde ich suboptimal. Alle Tests gestern einen Online-Status eines Nutzers rauszufinden sind bei mir gescheitert. Vielleicht findet sich jemand, der das Script aufbohren mag?

Das kleine Script dürft ihr benutzen, wie ihr lustig seit, es hat keine Lizenz. Viel Spaß!
Geschrieben von garvin in PHP / Software um 09:34 | Kommentare (3) | Trackbacks (0)
8493 Klicks
Tweet This!
Bookmark Jabber E-Mail Notify  at del.icio.us Facebook Google Bookmarks Digg Jabber E-Mail Notify

Trackbacks
Trackback-URL für diesen Eintrag

Keine Trackbacks

Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

*Yeeeha. Funktioniert. Geil. Danke! :D
#1 Andy (Link) am 09.08.2006 10:25 (Reply)
*1. Big THX für den Tipp mit der älteren Class Vesrion ! Ich bin an dem Auth Prob der aktuellen fast verzweifelt :(

2. teste doch mal auf der Seite des Autors seine Bsp. besonders das wo er das $JABBER->CruiseControl(60) benutzt ;)
Da bekomme ich im Browser als Feedback :
eddy@jabber.i-pobox.net is Online.EVENT: Keep-Alive returned, connection alive. EVENT: jabber:iq:time (type result) from jabber.org SEND:
wenn ich gerade mit meinem Client online bin. da hast doch dann deinen Status :)
#2 Eddy am 10.09.2006 12:33 (Reply)
*Wenn es so einfach wäre! Erwähntes Script von mir ist ja kein Dämon der CruiseControl nutzt - da er ja eventgesteuert aufgerufen wird, muss sich die Verbindung somit jedesmal erneut aufbauen. Und so kann man die Online-Events nicht mitbekommen...
#2.1 Garvin (Link) am 10.09.2006 18:51 (Reply)

Kommentar schreiben

Pavatar/Favatar/Gravatar wird unterstützt
BBCode-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

 
 
« Schlag den Boll | Startseite | « Nikon D80 »

Suche

Kalender

Zurück Juli '10 Vorwärts
Mo Di Mi Do Fr Sa So
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Femto-Blog

  • All Done. Bye-Bye.30.07 13:07
  • Grossartige Idee von RTL2, Calufornication in 4er-Packs hintereinander zu verheizen. Das würd ich mir nichmal als Fan antun.30.07 06:07
  • @isotopp Übst Du schon die ersten inhaltsschwangeren Lieder, die Du dem Sproß beibringst? :)29.07 19:07
  • Und Bonn brennt. Die tollsten Sachen kriegt man nicht mit, wenn man fleißig Deadlines überschreitet.29.07 15:07
  • Grr. High impact Typo3-Sicherheitslücken vor Feierabend sind das schönste.29.07 15:07
  • Tja, wenn der Kindle3 jetzt auch Comics hätte ablichten können, dann wäre ich schon stark in Versuchung...29.07 12:07
  • @AndiH und p.s: ich hab mir die serie nur aufgrund deines tipps angesehen. Thx :-)29.07 08:07
  • @AndiH Jau, es ist wirklich eigenständig, und auch nettes lovestory&dialog-writing. Mich verwirrt nur Jim, sieht aus wie dicker Dexter :)29.07 08:07
  • The Glades: Entgegen seiner faden Beschreibung ein spannendes, twistiges, soziopathes neues TV-Procedural a la Mentalist/Columbo. Nice!29.07 07:07

Kommentare

Christian zu Was vom Spielefrühling übrig blieb...
Mi, 02.06.2010 14:29
*Hmmm, ja geb ich Dir recht. Aber da meine PS3 erst am Freitag eintrifft (freu) war ich ja regelrecht gezwungen ;-) A [...]
Garvin zu Was vom Spielefrühling übrig blieb...
Mi, 02.06.2010 14:01
*Hhm, also von Red Steel 2 war ich damals bei der Gamescom wenig überzeugt, und auch die Reviews dazu haben mich nicht s [...]
Christian zu Was vom Spielefrühling übrig blieb...
Mi, 02.06.2010 13:50
*Also ich finde da fehlt noch Red Steel 2 für Wii. Keine Tiefe in der Story aber ein cooles Gameplay und der Muskelkater [...]
Garvin zu Portemonnaie / Geldbörse verloren oder gestohlen
Di, 01.06.2010 10:18
*Huch, Kommentare hier von der Seite schon länger nicht gecheckt, sorry. Lustig wie sich die Wege kreuzen - ich hoffe [...]
Frank-Tuerr zu Kaufwarnung: Dante's Inferno
Mo, 31.05.2010 20:20
*Den letzten Satz kann ich nur unterschreiben, ähnliche Gedanken hatte ich auch als ich das Game mal unter die Lupe geno [...]

Über mich

Ich heiße Garvin Hicking, wohne in Köln und bin alt genug um ein Blog führen zu dürfen. Derzeit arbeite ich als Webentwickler bei Faktor E, bin gelegentlich selbständig tätig und arbeite mit PHP, (My)SQL und XHTML/ XML/ CSS/ JavaScript.

Meine Freizeit nutze ich zur Entwicklung von Serendipity und phpMyAdmin - und (nicht nur) wenn ich genug von Computer habe, genieße ich das Leben mit meiner Freundin Emba im Kino, hinter der Fotokamera, daheim oder bei unseren Freunden. Und ein Gesicht habe ich auch:
Garvin Hicking
Facebook / Xing

Zend Certified PHP Engineer

Legasthenie-Info

Dieses Blog strotzt vor Komma-Fehlern. Ich bekenne eigenständig, öffentlich und freiwillig im Vollbesitz meiner geistigen und Halbbesitz meiner ortographischen Fähigkeiten, auf diese Fehlern zu bestehen und erkläre, der neuen Deutschen Rechtschreibung bisher nicht anheim gefallen zu sein. Wer zusätzliche Fehler findet, darf sie ebenfalls behalten. :-)

Getaggte Artikel




(c)1999-2004 by garvin hicking   |   
Valid XHTML 1.1! Valid CSS! American English PayPal Wunschliste Amazon / Wishlist Amazon

Die Einbindung fremder Bilder erfolgt im Rahmen der journalistischen bzw. persönlichen Berichtserstattung. Urheberrechte dieser Materialien liegen beim Eigentümer.
Weiteres siehe Impressum / Datenschutzerklärung


Online Einkaufen Börsenbriefvergleich