Как стать автором
Обновить

Уведомление о новых письмах в jabber

Время на прочтение 2 мин
Количество просмотров 617
В gtalk есть приятная опция оповещения пользователся о новых письмах, но поскольку я пользуюсь другим jabber-сервером, подумалось, что было бы удобно замутить такую фичу и себе. Может я конечно плохо смотрел, и в gmail есть такая возможность, но я её не нашел и написал небольшой скриптик, который повесил в cron. И теперь он радостно меня оповещает о новых письмах каждые 15 минут, если конечно таковые письма имеются.

Для работы с jabber использовал библиотеку XMPPHP.
Далее код и комментарии…

Сначала описываем в конфиге откуда и куда шлем уведомления
  1. // config.php
  2.  $jabberServer = ‘jabber.ru’; // Сервер на котором находится аккаунт-уведомитель
  3.  $jabberPort = 5223; // Порт сервера
  4.  $jabberLogin = ‘mailnotify’; // Логин уведомителя
  5.  $jabberPassword =123; // Соответствующий пароль
  6.  $jabberID = “you@jabber.ru”; // JabberID получателя
  7.  $email = “yourEmail”; // Ваше мыло
  8.  $emailPassword = “emailPassword”; // Ну и пароль от него


Код основного скрипта:
  1. include_once(‘config.php’);
  2. $mbox = imap_open({pop.gmail.com:995/pop3/ssl/novalidate-cert}INBOX”,
  3.     $email, $emailPassword
  4.     );
  5. $recentMails = imap_num_recent($mbox);
  6. if($recentMails > 0) {
  7.  include_once(“XMPPHP/XMPP.php”);
  8.  $notifySent = false;
  9.  
  10.  $jabberConnection = new XMPPHP_XMPP($jabberServer,
  11.      $jabberPort,
  12.      $jabberLogin,
  13.      $jabberPassword,
  14.      ‘xmpphp’,
  15.      $jabberServer,
  16.      $printlog=false,
  17.      $loglevel=LEVEL_ERROR
  18.      );
  19.  $jabberConnection->useSSL(true);
  20.  $jabberConnection->connect();
  21.  $jabberConnection->processUntil(session_start);
  22.  $jabberConnection->presence();
  23.  $jabberConnection->message($jabberID, ‘В ящике ‘.$recentMails.‘ новых писем, иди читай’);
  24.  
  25.  for($i=1;$i<=$recentMails;$i++)
  26.   imap_fetchbody($mbox, $i, 1);
  27.  
  28.  $jabberConnection->disconnect();
  29. }


Вот собственно и все, простая оповещалка готова. Также можно добавить к ней немного интерактивности, что позволит например читать письма прямо в жабе, достаточно добавить конструкцию подобную этой:
  1. $notifySent = false;
  2. while(!$jabberConnection->isDisconnected()) {
  3.  $loads = $jabberConnection->processUntil(array(‘message’,session_start));
  4.   foreach($loads as $event) {
  5.    $pl = $event[1];
  6.    switch($event[0]) {
  7.     case “message”:
  8.      if($pl[‘body’] ==!read’)
  9.       $jabberConnection->message(‘user@jabber.ru’, getEmails($mbox, $recentMails));
  10.      elseif($pl[‘body’] ==!exit)
  11.       $jabberConnection->disconnect();
  12.      break;
  13.     default:
  14.      if(!$notifySent) {
  15.       $jabberConnection->message(‘user@jabber.ru’, ‘В ящике ‘.$recentMails.‘ новых писем, иди читай’);
  16.       $notifySent = true;
  17.      }
  18.      break;
  19.    }
  20.   }


Остается только добавить свои команды и обработчики и получится такой вот jabber-бот.
Теги:
Хабы:
+9
Комментарии 9
Комментарии Комментарии 9

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн