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

    В 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-бот.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 9

      0
      $jabberConnection->message(‘user@jabber.ru’, ‘В ящике ‘.$recentMails.‘ новых писем, иди читай’);
      тут надо $jabberID вместо user@jabber.ru
        0
        Для FF есть надстройка Gmail Notifier для этих целей.
          –1
          Огородов то понагарадили… Плагинов для файрфокса и просто «проверялок» под Windows куча, а тут cron, скрипт… Видимо вам просто хотелось потренироваться в написании скриптов…
            0
            ага, не самих скриптов, а с жаббером поработать =)
              +1
              FF уже работает например на мобильниках с поддержкой только java мидлетов? «А мужики-то и не знали....».
              1) виндой мир не ограничивается
              2) равно как и FF-ом
              3) равно как и jabber не привязан к платформе
              4) да и вообще — «зачем мне ЕЩЕ одна программа на клиенте?»
              0
              На вашем сервере нету, что ли, j2j транспорта?
              Просто подкручиваете гуглотолковый акк к своему через транспорт и всё отлично уведомляет

            Only users with full accounts can post comments. Log in, please.