supergarv

Garvin Hicking :: blog

"I thought it was one of these paintings coming to life" - Scully

  •  
  •  
  • Ü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

  • Mai 2012
  • April 2012
  • März 2012
  • Das Neueste ...
  • Älteres ...

Powered by

Serendipity PHP Weblog

Startseite

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)
11791 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
*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
*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

Kommentar schreiben

Pavatar, Favatar, Gravatar, Pavatar Autoren Bilder werden 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

 
 
Startseite

Suche

Kalender

Zurück Mai '12 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

  • @cilice Jau, ohne die Shift-Taste wäre das Spiel tatsächlich gänzlich untaktisch. Aber public interessiert mich nicht, nur Bekannte m. Chat?25.05 08:05
  • blog Frustration mit Diablo III link25.05 08:05
  • @rodneyrehm OK, habs gerade gepatcht, setzt nun SMARTY_RESOURCE_CHAR_SET auf ISO-8859-1.25.05 08:05
  • @rodneyrehm Lass dir zeit, ich glaube ich kann gleich den Finger drauf zeigen. ;)25.05 08:05
  • @rodneyrehm Hab gerade noch was weiter geschaut, das wurde dann zu lang und hab gerade ne Mail geschickt. ..gucke auch gerade noch weiter.25.05 07:05
  • @rodneyrehm Hat sich in Smarty3 am @escape modifier was geändert, dass der latin1 jetzt strippt?25.05 07:05
  • Ich trau mich fast nicht zu sagen: Diablo3 macht mir eher wenig Spass. Bin ich damit allein? So much stupid repetitive klicking on things.25.05 07:05
  • now that @tapbots tweetbot has mutable keywords they only need to get an osx client out, and I?ll enjoy twitter a lot more.24.05 21:05
  • And again @BlizzardCS is unable to provide a playable Diablo3 environment due to BattleNet Account management being down. WTF!24.05 17:05

Kommentare

Marc zu Frustration mit Diablo III
Fr, 25.05.2012 12:02
*In vielen Punkten sprichst du mir aus der Seele. Insgesamt fördert Diablo genau das, was in vielen anderen Rollenspiele [...]
Chris zu Frustration mit Diablo III
Fr, 25.05.2012 11:26
*Du kannst Skyrim auch in 30h durchspielen - die Haupt-Questline ist vielleicht so 20h lang. Für die 100% "seen" reicht [...]
Dirk Olbertz zu Frustration mit Diablo III
Fr, 25.05.2012 11:00
*Diablo 3 ist auch mein "erstes" Diablo, habe aber noch Spaß daran. Für die Story spiele ich alleine und habe ggf. au [...]
Garvin zu Frustration mit Diablo III
Fr, 25.05.2012 11:00
*TL;DR: Ich hab doch keine Zeit! Oh, ich tue mich immer schwer damit, wenn ich als Nichtkaufgrund herangezogen werde; [...]
Chris zu Frustration mit Diablo III
Fr, 25.05.2012 10:50
*Dieser Artikel hat gerade meine Kaufentscheidung für mich getroffen. Danke für die gesparte Lebenszeit! Als eine Art [...]

Ü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