|
Укрощаем мобилу. Пишем mail-forwarder Дмитрий Докучаев aka Forb Xakep, номер #050, стр. 050-090-2 1. Debug - вывод пошаговой информации или, иными словами, печать того, что делает скрипт в данный момент. 2. Режим удаления сообщений. Тебе решать, что делать со стянутой со своего ящика мессагой - удалять или оставлять ее на сервере. По умолчанию удаление выключено. 3. Указание максимального размера сообщения. Дело в том, что если длина SMS с интернета превышает 160 символов, сервер оператора разбивает сообщение на 2,3 или более сообщений. Я не уверен, что тебе было бы приятно получить по SMS всего «Евгения Онегина», поэтому, если размер сообщения превышает заданное число, то SMS урезается. А теперь приведу сам скрипт с подробными комментариями. Ты можешь скачать его с http://kamensk.net.ru/forb/1/mail.tar.gz. Итак, поехали. #!/usr/bin/perl ### Sms-Forwarder for Mobiles any versions ;] ### By Forb <forb@real.xakep.ru>, ICQ: 304211 use Net::POP3; ## Подгружаем модуль POP3.pm $debug=0; $delete=0; $maxsize=600; ## Фичи скрипта, их назначение смотри выше $mail='myname@secureserver.ru@mysmallpassword'; ## Данные на ящик, с которого будем перенаправлять почту $cmail='sms_for_me@mail.ru@smska'; ## Данные на ящик, на который будем отсылать почту с мобильника $mcenter='me@shell.ru'; ## Адрес отправителя SMS (можно указать твой логин на шелле и хост самого шелла) $smsmail='+79028863231@sms.uraltel.ru'; ## Почтовый ящик, который предоставляет оператор my($res)=mconnect($cmail); ## Первоначальная стадия - проверка мыла на реквестовом ящике $res=$res == 1 ? print "Got SMS. Trying to get new mail\n" : exit print "No such SMS\n" if $debug; ## Обработка результата, если выставлен Debug $step=1; ## Установка глобальной переменной step - далее станет ясно, зачем она нужна my($res)=mconnect($mail); ## Еще один вызов процедуры mconnect, уже с параметром ящика для перенаправления $res=$res == 1 ? print "Getting mail. Sending to mobile\n" : exit print "No mess ages\n" if $debug; ## Обработка результатов sendmessage(@send); ## Отправление сообщения на мобилу, если скрипт доживет до этого места ## Вот все тело скрипта. Далее идут две компактные процедуры mconnect() и sendmessage() sub mconnect { my($info)=shift; ## Берем параметр в переменную $info my($stop)=0; ## Обнуляем локальную переменную $stop my($popuser,$pophost,$poppass)=split('@',$info); ## Получаем имя пользователя, адрес сервера и пароль на ящик my($pobject)=Net::POP3->new("$pophost", Timeout => 60) || die "Cannot create object\n"; ## Вызываем конструктор New, с указанием хоста и поля Timeout со значением 1 минута $messages=$pobject->login("$popuser","$poppass"); ## Логинимся на сервер if ($messages ne '0E0' && $step == 1) { ## Если есть сообщения и шаг второй (проверка второго по счету ящика): $msg=$pobject->get($messages); ## Стягиваем сообщение |