В gtalk есть приятная опция оповещения пользователся о новых письмах, но поскольку я пользуюсь другим jabber-сервером, подумалось, что было бы удобно замутить такую фичу и себе. Может я конечно плохо смотрел, и в gmail есть такая возможность, но я её не нашел и написал небольшой скриптик, который повесил в cron. И теперь он радостно меня оповещает о новых письмах каждые 15 минут, если конечно таковые письма имеются.
Для работы с jabber использовал библиотеку XMPPHP.
Далее код и комментарии…
Сначала описываем в конфиге откуда и куда шлем уведомления
Код основного скрипта:
Вот собственно и все, простая оповещалка готова. Также можно добавить к ней немного интерактивности, что позволит например читать письма прямо в жабе, достаточно добавить конструкцию подобную этой:
Остается только добавить свои команды и обработчики и получится такой вот jabber-бот.
Для работы с jabber использовал библиотеку XMPPHP.
Далее код и комментарии…
Сначала описываем в конфиге откуда и куда шлем уведомления
- // config.php
- $jabberServer = ‘jabber.ru’; // Сервер на котором находится аккаунт-уведомитель
- $jabberPort = 5223; // Порт сервера
- $jabberLogin = ‘mailnotify’; // Логин уведомителя
- $jabberPassword = ‘123′; // Соответствующий пароль
- $jabberID = “you@jabber.ru”; // JabberID получателя
- $email = “yourEmail”; // Ваше мыло
- $emailPassword = “emailPassword”; // Ну и пароль от него
Код основного скрипта:
- include_once(‘config.php’);
- $mbox = imap_open(“{pop.gmail.com:995/pop3/ssl/novalidate-cert}INBOX”,
- $email, $emailPassword
- );
- $recentMails = imap_num_recent($mbox);
- if($recentMails > 0) {
- include_once(“XMPPHP/XMPP.php”);
- $notifySent = false;
-
- $jabberConnection = new XMPPHP_XMPP($jabberServer,
- $jabberPort,
- $jabberLogin,
- $jabberPassword,
- ‘xmpphp’,
- $jabberServer,
- $printlog=false,
- $loglevel=LEVEL_ERROR
- );
- $jabberConnection->useSSL(true);
- $jabberConnection->connect();
- $jabberConnection->processUntil(’session_start’);
- $jabberConnection->presence();
- $jabberConnection->message($jabberID, ‘В ящике ‘.$recentMails.‘ новых писем, иди читай’);
-
- for($i=1;$i<=$recentMails;$i++)
- imap_fetchbody($mbox, $i, 1);
-
- $jabberConnection->disconnect();
- }
Вот собственно и все, простая оповещалка готова. Также можно добавить к ней немного интерактивности, что позволит например читать письма прямо в жабе, достаточно добавить конструкцию подобную этой:
- $notifySent = false;
- while(!$jabberConnection->isDisconnected()) {
- $loads = $jabberConnection->processUntil(array(‘message’, ’session_start’));
- foreach($loads as $event) {
- $pl = $event[1];
- switch($event[0]) {
- case “message”:
- if($pl[‘body’] == ‘!read’)
- $jabberConnection->message(‘user@jabber.ru’, getEmails($mbox, $recentMails));
- elseif($pl[‘body’] == ‘!exit’)
- $jabberConnection->disconnect();
- break;
- default:
- if(!$notifySent) {
- $jabberConnection->message(‘user@jabber.ru’, ‘В ящике ‘.$recentMails.‘ новых писем, иди читай’);
- $notifySent = true;
- }
- break;
- }
- }
Остается только добавить свои команды и обработчики и получится такой вот jabber-бот.