Укрощаем мобилу. Пишем 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); ## Стягиваем сообщение

Назад на стр. 050-090-1  Содержание  Вперед на стр. 050-090-3