|
Укрощаем мобилу. Пишем mail-forwarder Дмитрий Докучаев aka Forb Xakep, номер #050, стр. 050-090-3 for ($i=1;$i<=$#$msg;$i++) { my($mess)=$msg->[$i]; chomp($mess); push(@send,$mess) if $stop; ## Записываем его тело в массив @send $stop = 1 if ($mess eq ''); break if ($mess eq '.'); } } if ($messages eq '0E0') { ## Если сообщений нет, вернем 0 при дебаге, либо просто завершим скрипт return 0 if $debug; exit } $pobject->delete(1) if (($delete && $step) || (!$step)); ## Удалим сообщение, если стоит опция $delete, либо если проверяем реквестовый ящик $pobject->quit; return 1; ## Успешно выходим... } sub sendmessage { my(@what)=@_; my($scal)=0; ## Получаем тело сообщения и обнуляем переменную для получения размера open(MAIL,"|/usr/sbin/sendmail -t") || die "cant send email $!\n"; ## Открываем sendmail для записи данных в него print MAIL << "EOF"; From: Center <$mcenter> To: $smsmail Content-type: text/plain EOF ## Пишем в него заголовок сообщения: адрес отправителя и ящик адресата foreach (@what) { $scal+=length($_); ## Получаем размер каждой строки тела сообщения, суммируя его в $scal break if ($scal > $maxsize); ## Прерываем цикл при достижении максимального размера print MAIL "$_\n" ## Пишем тело сообщения в дескриптор sendmail'а } close(MAIL); ## Закрываем поток } Как видишь, все просто. Суть скрипта - это вызов mconnect() 2 раза для проверки обоих ящиков и в случае, когда на обоих есть сообщения, пересылка последнего сообщения на мобилу. Метод $self->login() возвращает количество сообщений на ящике, либо 0E0, когда сообщений нет. Затем происходит тонкая работа с элементами массива, ссылка на который возвращается методом $self->get(). Переменная $step нужна, чтобы не переписывать одну и ту же процедуру несколько раз. Как видишь, у меня это получилось =). А теперь немного расскажу, как юзать эту штуковину. После успешного создания скрипта на всякий случай проверь его синтаксис командой perl -c mail.pl, где mail.pl - твой скрипт. Затем запусти редактор кронтаба командой crontab -e. В нем войди в режим ввода текста (ESC, i) и забивай туда примерно следующее: 0,10,20,30,40,50 * * * * /usr/bin/perl /home/login/work/mail.pl >/dev/null 2>&1 & где 0,10,20,30,40,50 - время в минутах для запуска скрипта (в моем случае скрипт будет запускаться каждые 10 минут). Все сообщения, которые он будет выводить, уйдут в /dev/null (если бы этого не было, они бы ушли тебе на почтовый ящик). Вариации на тему Ты можешь модифицировать этот скрипт, добавив, например, туда чистку от html-сообщений, либо создав проверку более одного реквестового ящика, по которой можно судить, какой ящик следует проверять и с какого перенаправлять =). Таким образом ты создашь мультипользовательскую среду в одном скрипте. Фантазия тут безгранична. Я же ограничился вышеизложенным вариантом и пользуюсь этой фичей уже больше недели. Теперь можно с уверенностью сказать, что прежде чем тратиться на дорогой мобильник, следует подумать, а не сделать ли тебе из старого то, что ты давно хотел иметь? Ведь старый друг лучше новых двух. |