Hi Ingrid,
Jedenfalls habe ich jetzt folgendes beobachtet: Nach knapp zwei Stunden, war der ICQ User immer noch online, heute morgen - also ca. 11 Stunden später - war er dann wieder offline, er scheint also schon irgendwann von alleine rauszufliegen (was ich auch so erwartet habe, allerdings deutlich früher - und natürlich wundert es mich, dass er nicht direkt nach Scriptende wieder draußen ist).
Also - ich habe nun, glaube ich bzw. hoffe ich zumindestens, die Probleme gelöst, als da waren:
- Beim ersten Versuch kommt die Nachricht nicht durch
- Der User in ICQ bleibt online
Ich zeige euch einfach noch mal mein jetziges Script:
// Erst mal mit den gegebenen Daten Verbindung herstellen
$jabber->Connect() or print("Error while connecting");
// und authentifizieren
$jabber->SendAuth() or print("Error while authenticating");
// Jetzt erst mal noch den Status explizit auf online setzen, es
// gibt glaube ich keine Garantie dafür, dass das automatisch der
// Fall ist!
$jabber->SendPresence(NULL, NULL, "online");
// Den Transport herstellen, wie ich es bis jetzt auch immer gemacht
// habe, mit Benutzername und Passwort
$jabber->TransportRegistration("icq.jabber.freenet.de",
array("username" => "241664xxx",
"password" => "<PW>")
);
// Nun ist eine kleine Pause nötig, bis der Transport auch wirklich
// hergestellt ist - wartet man diese Zeit ab, so kommt der User in
// ICQ auch wirklich online, egal was vorher war
sleep(5);
// Nun schreiben wir die Nachricht bzw. in einer Schleife auch mehrer
// Nachrichten, sollte eigentlich alles problemlos möglich sein
$jabber->SendMessage("238968604@icq.jabber.freenet.de", NULL, NULL,
array("body" => "Hallo Dennis",
"thread" => "01")
);
// So, hier kommt jetzt die wichtige Stelle, dass der User in ICQ auch
// direkt wieder offline geht und nicht nächsten Stunden da online
// bleibt bis er irgendwann gekickt wird ;-)
// Wir müssen einfach nur explizit unseren Status wieder auf offline
// setzen, und schwupps ist der ICQ User weg!
$jabber->SendPresence("unavailable", NULL, "not there");
// Jetzt einfach nur noch disconnecten - die Methode Disconnect() macht
// eben das Setzen des Status auf offline nicht, sondern bricht einfach
// nur sofort die Verbindung (ordnungsgemäß) ab.
$jabber->Disconnect();
Ich habe jetzt also nun die gewünschte Möglichkeit die Nachrichten zu Versenden gefunden, und mit Jabber ist das auf jeden Falle einfacher als direkt über ICQ und vorallem leichter aus PHP zu bedienen, ich brauche keine weitere Software mehr.
In diesem Sinne: Alle Fliegen mit einer Klappe geschlagen, noch mal einen herzlichen Dank an Eternius - ich wusste zwar, dass es Jabber gibt, aber es war mir nicht bekannt, dass es diese Transports gibt, mit denen eine Verbindung zum ICQ Netzwerk möglich ist. Du hast mir also die Augen geöffnet Eternius ;-)
MfG, Dennis.