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

Lumber room
В 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. $jabberConnection = new XMPPHP_XMPP($jabberServer,
  10. $jabberPort,
  11. $jabberLogin,
  12. $jabberPassword,
  13. ‘xmpphp’,
  14. $jabberServer,
  15. $printlog=false,
  16. $loglevel=LEVEL_ERROR
  17. );
  18. $jabberConnection->useSSL(true);
  19. $jabberConnection->connect();
  20. $jabberConnection->processUntil(session_start);
  21. $jabberConnection->presence();
  22. $jabberConnection->message($jabberID, ‘В ящике ‘.$recentMails.‘ новых писем, иди читай’);
  23. for($i=1;$i<=$recentMails;$i++)
  24. imap_fetchbody($mbox, $i, 1);
  25. $jabberConnection->disconnect();
  26. }


Вот собственно и все, простая оповещалка готова. Также можно добавить к ней немного интерактивности, что позволит например читать письма прямо в жабе, достаточно добавить конструкцию подобную этой:
  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-бот.
Tags:jabberphpemail
Hubs: Lumber room
+9
252 14
Comments 9

Popular right now

Комплексное обучение PHP
April 19, 202120,000 ₽Loftschool
PHP. Уровень 1. Основы создания сайтов
February 1, 202115,990 ₽Специалист.ру
Android-разработчик с нуля
January 29, 202179,900 ₽Нетология
Основы HTML и CSS
February 1, 2021FreeНетология