Укрощаем мобилу. Пишем mail-forwarder

Дмитрий Докучаев aka Forb

Xakep, номер #050, стр. 050-090-1


(forb@real.xakep.ru)

В нашей современной жизни на первом плане стоят вещи, без которых человек уже не способен обходиться. Одна из таких вещей - мобила. Cегодня народ уже не помнит, что когда-то мобила была в диковинку и имелась лишь у избранных. Да, ценности постепенно теряют свою актуальность и дешевеют, а взгляды людей на вещи меняются.

Мобилы бывают разные

Стоимость их колеблется от 50 до 2000$, в зависимости от наличия различных функциональных возможностей. Одна из таких возможностей - снятие мыла через мобилу, некое подобие встроенного Outlook’а. Соответственно, цена на такой телефон будет довольно высокой. А что же делать простым смертным, у которых дешевые телефоны, а тратиться на дорогой не хочется? Здесь тебе поможет смекалка и умение программировать. Программирование, как известно, может пригодиться во многих отраслях наук, в том числе и в мобильной телефонии.

В чем же фишка всего вышесказанного? Начнем по порядку. Каждый уважающий себя провайдер мобильной связи предоставляет такую услугу, как SMS через Internet. Используя эту услугу, можно обмениваться SMS-сообщениями по e-mail как с телефона, так и на телефон. За каждым клиентом закрепляется собственный ящик для SMS, например, +79028863231@sms.uraltel.ru. Пришедшее на него мыло автоматически скидывается клиенту на телефон (не думай, что я буду описывать DoS по SMS :)). Провайдер выделяет также номер, с которого пришедшие на него SMS в формате "mail@host.ru ТЕКСТ СООБЩЕНИЯ" автоматически уходят на заданный e-mail. Вот весь спектр услуг, которые может юзать клиент с любой мобилы (где есть возможность отправлять SMS, естественно). Наша задача состоит в том, чтобы заставить почту приходить с твоего любимого ящика к тебе на телефон в виде SMS.

Итак, что нам потребуется для заветной цели? Во-первых, шелл, где есть поддержка crontab, Perl и работа с сокетами. Именно на таком шелле мы будет обкатывать свой супер-скрипт. Во-вторых, активная услуга SMS через интернет, так как, если она не будет активизирована, ты не сможешь пользоваться SMS через e-mail. В-третьих, зарегистрированный почтовый ящик с любым названием (я опишу, для чего он нужен) с POP3-авторизацией для снятия с него e-mail. И, наконец, прямые руки и стремление к цели.

Настало время рассказать об алгоритме работы скрипта. При запуске он проверяет ящик, который ты зарегистрировал, на наличие новых сообщений. На этот ящик ты будешь посылать SMS-запрос на проверку новых мессаг. Когда в нем оказывается сообщение, отправленное с твоего телефона, скрипт проверяет наличие новых SMS уже на интересующем тебя ящике. Если таковые имеются, скрипт посылает тебе на телефон SMS, в теле которой будет находиться последнее письмо с интересующего тебя ящика. Вот, собственно, в чем заключается краткий алгоритм работы форвардера.

Погружение в кодинг

Теперь пора заняться созданием самого алгоритма. Для проверки сообщений я использовал стандартный Perl-модуль Net/POP3.pm. Он позволяет гибко работать с pop3-сервером без лишнего кода, который имел бы место при использовании IO/Socket.pm. Для отправки сообщений используется обычный sendmail. Ах да, забыл упомянуть, что на шелле он тоже должен быть в рабочем состоянии :). Еще несколько особенностей, чтобы не было путаницы в приведенном ниже коде. У скрипта существуют три фичи. Кратко остановимся на каждой из них.

Содержание  Вперед на стр. 050-090-2