Автор Тема: Отправка смс-сообщений  (Прочитано 11964 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Отправка смс-сообщений
« : 05 Сентября 2002, 12:19:01 »
Нужен совет.

скажу сразу, есть свой собственный сервер Apache который крутится под win2000 server. сайт работающий под mod_perl+mason+mysql. имеется полный доступ до сервера и до веб-сервера, т.е. никаких ограничений.

был реализован сервис для отправки смс-сообщений, но правда такая проблема: при отправке сообщения непосредственно из скрипта идет торможение работы сервера, потому что ответ пользователю не отдается до тех пор пока не будет отправлено сообщение. используется Net::SMTP.

еще проблема в том, что почтовый сервер находится не в моем распоряжении, на другой машине, тем более Юниксовой.

был найден выход: сделать просто скрипт который будет писать в базу все сообщения, а другой (оффлайновый) будет их оттуда доставать и непосредственно отсылать, чтобы не было проблем.

в чем вопрос? можно ли как-то более правильно сделать этот сервис, потому что мне кажется что это немного криво, да и вообще через некоторое время в планах есть переход на Юникс. про юниксовый сендмейл я знаю ;)

или поделитесь опытом, как вы делали такие сервисы или как их можно сделать? пользоваться серверами самих компаний мобильной связи не хочется, да и кроме того, сайт в большей мере предназначен для локальной сети, а уж потом для инета, да и может быть отрублен инет для тех кто находится внутри сети.
« Последнее редактирование: 05 Сентября 2002, 12:36:51 от USE »
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #1 : 05 Сентября 2002, 20:19:07 »
Думаю, ты правильно поступил. У всех почтовых транспортных агентов существуют очередя на доставку(тот же сендмейл). Но если ты хочешь профиссионально поставить сервис, тебе прийдется выходить на контакт с провайдерами моб. связи и спрашивать у них чё, и как надо делать(этим вопросом я чуть было не занялся, потому точно знаю, что гонять СМС по имэйлу в корень неправильно).

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Отправка смс-сообщений
« Ответ #2 : 05 Сентября 2002, 23:47:30 »
Цитировать
гонять СМС по имэйлу в корень неправильно


ко мне тоже начала приходить в голову такая мысль после того как я начал отправлять эти самые смс-ы. когда положишь в аутбокс хотя бы штук этак 20, то к адресатам придут около 5-10 всего лишь, даже пробовал на свой телефон такое делать, когда мелодии какие-то заливал, придет 5, а остальные замораживаются. абидно :(

тогда какой выход может быть, ведь если взять, что локальная сеть, в которой только сервер имеет доступ в интернет (в принципе большего не надо :) ) да и то по очень слабому каналу. похоже это уже не по теме.

большое спасибо за идею. ничего страшного что придется переписывать :) зато возможно будет корректно работать.

кроме того, кто пользовался модулем Net::SMTP не возникало ли у вас такого ощущения, что его работа слишком притормаживает?

мб есть какой-нить аналог ему?
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Отправка смс-сообщений
« Ответ #3 : 06 Сентября 2002, 08:35:47 »
Цитировать
гонять СМС по имэйлу в корень неправильно

По-моему это зависит от задачи. У меня вот возникла необходимость отпралять себе на SMS уведомления об определенных событиях. Предполагаю использовать sendmail. На следующей неделе проверю.

PS. А еще многое зависит от оператора сотовой связи. В Bee-line сейчас есть "mail2sms" и вроде бы работает стабильно.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Отправка смс-сообщений
« Ответ #4 : 06 Сентября 2002, 09:25:56 »
Цитировать
По-моему это зависит от задачи


да ты прав. но задача у меня выходит такой что это должен быть сервис и если операторы ставят твиты после того как приваливает им с одного е-мейла больше 10 сообщений - тогда уже ничего не поделаешь...

Цитировать
У меня вот возникла необходимость отпралять себе на SMS уведомления об определенных событиях. Предполагаю использовать sendmail. На следующей неделе проверю


конечно, если ты будет отсылать себе по одному или по несколько писем в день - тогда все нормально, а если выходит что по 5 в минуту...?!

сейчас дописываю модуль для апача - статистику, который кроме всего прочего будет в конце дня отправлять мне отчет на е-мейл и на смс о посетителях сайта, о новых сообщениях на форуме, в гостевой и т.п.

Цитировать
А еще многое зависит от оператора сотовой связи. В Bee-line сейчас есть "mail2sms" и вроде бы работает стабильно


я буду ориентироваться на украинских операторов мобильной связи: ЮМС и Киев стар, ну еще Веллком и Голден телеком, на других просто нету смс-сов :)

p.s. кстати, я сильно удивился, когда прочитал на сайте DCC, что они в скором будущем только планируют ввести смс у себя :)
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #5 : 06 Сентября 2002, 11:12:28 »
Ребят, тут есть пример: sms.km.ua Можна было-бы поспрашивать че у них... но это так.
Цитировать
У меня вот возникла необходимость отпралять себе на SMS уведомления об определенных событиях


У меня тоже возникала, написал вот что:

#!/usr/bin/perl -w
use strict;

my $mail_dir = \'/var/mail\';
my $sendmail = \'/usr/sbin/sendmail -oi -t\';
my $timerate = 1;
my $tempfile = "./letter_tmp";
my $mail_as = \'webmaster@rv.ukrtel.net\';

my %users;
my %size;
my $user;
my ($key,$val);
my @lines;
$mail_dir =~ s/\\/$//;
my $time_to_die = 0;
my ($from,$to,$subj);

$SIG{HUP} = \\&read_conf;
$SIG{TERM} = $SIG{INT} = \\&time_to_stop;

sub read_conf {
 $SIG{HUP} = \\&read_conf;
 open(X,"./smsender.conf") || die "Couldn\'t open \'./smsender.conf\': $!\\n";
 while(){
  $_ =~ s/\\n//;
  $_ =~ s/\\r//;
  if($_ =~ /^\\#/ || $_ eq \'\'){next;}
  $_ =~ s/\\t/ /g;
  $_ =~ s/\\#[^"]*$//;
  $_ =~ s/^\\s*//;
  $_ =~ s/\\s*$//;
  $_ =~ s/\\s+/ /g;
  ($key,$val) = split(/ /,$_,2);
  $val =~ s/^\\"([^"]*)\\"$/$1/;
  $users{$key} = $val;
 }
 close X;

 open(X,">./smsedner.pid") || die "Can\'t create pid file: $!\\n";
 print X $$;
 close X;

 foreach $user(sort keys(%users)){
  if(-e "$mail_dir/$user" && -r "$mail_dir/$user"){
   $size{$user} =  (stat("$mail_dir/$user"))[7];
  } else {
   delete $users{$user};
   print "Smsender: user $user was deleted from list.\\n";
  }
 }
}

sub time_to_stop {
 open(X,">./smsedner.pid") || die "Can\'t create pid file: $!\\n";
 close X;
 $time_to_die = 1;
}

sub clear_html {
 my $text = shift;
 my $title;
 my @kill_tags = (\'script\',\'style\');
 my($i,$in);

 $text =~ s/\\t//g;
 $text =~ s/\\n/\\t/g;
 $text =~ s/\\r//g;
 $text =~ s/\\t\\s*/\\t/g;

 my %kill_tags;
 foreach(@kill_tags){
  $kill_tags{$_} = 1;
 }
 if($text =~ s/\\(.*)\\<\\/title\\>//i){$title = $1;} else {$title = \'\';}
 $in = $text;
 $text = \'\';
 
 my $tag = \'\';
 while(length($in) != 0){
  if($in =~ /(\\<|\\>)/){
   $text.= substr($in,0,index($in,\'<\'));
   $in = substr($in,index($in,\'<\'));
   if($in =~ /\\<(\\S+).*\\>/){
    $tag = $1;
    if($tag =~ /^!--?/){
     $in = substr($in,(index($in,\'->\')+2));
    } elsif (exists($kill_tags{"\\L$tag"})){
     $in = substr($in,(index($in,"<\\/$tag>")+length($tag)+3));
    } else {
     $in = substr($in,(index($in,\'>\')+1));
     $in =~ s/^[^<]*\\>//;
    }
   }
  } else {$text.=$in; $in = \'\';}
 }

 $text =~ s/\\ \\;/ /g;
 $text =~ s/\\•\\;/-/g;
 $text =~ s/\\<\\;/\\ $text =~ s/\\>\\;/\\>/g;
 $text =~ s/\\"\\;/\\"/g;
 $text =~ s/\\&\\;/\\&/g;
 
 my @lines = split(/\\t/,$text);
 
 my $offset;
 foreach $i(0..$#lines){
  $offset = 0;
  $lines[$i] =~ s/^\\s*//;
  $lines[$i] =~ s/\\s*$//;
  if($lines[$i] ne \'\' && length($lines[$i]) < 20){
   foreach (1..2){
    $offset++;
    if(($i+$offset) > $#lines){last;}
    $lines[($i+$offset)] =~ s/^\\s*//;
    $lines[($i+$offset)] =~ s/\\s*$//;
    if($lines[($i+$offset)] ne \'\'){
     $lines[$i].= " ";
     $lines[$i].=$lines[($i+$offset)];
     $lines[($i+$offset)] = \'\';
    }
   }
  }
 }

 $text = join("\\t",@lines);
 $text =~ s/^\\t*//;
 $text =~ s/\\t*$//;
 $text =~ s|\\t{6,}|\\n\\n|g;
 $text =~ s|\\t+|\\n|g;
 return($title,$text);
}

sub translate {
 my $from = shift;
 my $to = shift;
 my @text = @_?@_:();
 my %code = ();
$code{alt} =
"\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87".
"\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f".
"\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97".
"\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f".
"\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7".
"\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf".
"\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7".
"\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef".
"\\xf0\\xf1\\x49\\x69\\xf4\\xf5\\xf2\\xf3";

$code{koi} =
"\\xe1\\xe2\\xf7\\xe7\\xe4\\xe5\\xf6\\xfa".
"\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0".
"\\xf2\\xf3\\xf4\\xf5\\xe6\\xe8\\xe3\\xfe".
"\\xfb\\xfd\\xff\\xf9\\xf8\\xfc\\xe0\\xf1".
"\\xc1\\xc2\\xd7\\xc7\\xc4\\xc5\\xd6\\xda".
"\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0".
"\\xd2\\xd3\\xd4\\xd5\\xc6\\xc8\\xc3\\xde".
"\\xdb\\xdd\\xdf\\xd9\\xd8\\xdc\\xc0\\xd1".
"\\xb3\\xa3\\xb6\\xa6\\xb7\\xa7\\xb4\\xa4";

$code{iso} =
"\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7".
"\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf".
"\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7".
"\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf".
"\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7".
"\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf".
"\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7".
"\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef".
"\\xa1\\xf1\\xa6\\xf6\\xa7\\xf7\\xa4\\xf4";

$code{win} =
"\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7".
"\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf".
"\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7".
"\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf".
"\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7".
"\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef".
"\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7".
"\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff".
"\\xa8\\xb8\\xb2\\xb3\\xaf\\xbf\\xaa\\xba";

 if(!(exists $code{$from}) || !(exists $code{$to})){
  if(scalar(@text) == 1){return $text[0];} elsif (scalar(@text) == 0){return \'\';}
  return @text;
 }

 foreach(@text){
  eval "\\$_ =~ tr/$code{$from}/$code{$to}/";
 }
 if(scalar(@text) == 1){return $text[0];} elsif (scalar(@text) == 0){return \'\';}
 return @text;
}
 
sub ebase64 {
 my $line = shift;
 my $enc = \'\';
 my($pad,$len);
                           
 while($line =~ /(.{1,45})/gs){
  $len+=length($1);
  $enc.= substr(pack(\'u\', $1),1);
  chop($enc);
 }

 $enc =~ tr|` -_|AA-Za-z0-9+/|;
 $pad = (3 - ($len % 3)) % 3;
 $enc =~ s/.{$pad}$/\'=\' x $pad/e if $pad;
 $enc =~ s/(.{76})/$1\\n/g;
 return $enc;
}

sub dbase64 {
 my $data = shift;
 my $len;
 my $res = "";
 $data =~ tr|A-Za-z0-9+=/||cd;
 if (length($data) % 4){return \'\';}
 $data =~ s/=+$//;
 $data =~ tr|A-Za-z0-9+/| -_|;
 while ($data =~ /(.{1,60})/gs) {
  $len = chr(32 + length($1)*3/4);
  $res .= unpack("u", $len . $1 );
 }
 return $res;
}

sub trans {
 my $text = shift;

 $text =~ s/^=\\?//;
 $text =~ s/\\?=$//;
 my ($t1,$t2,$t3) = split(/\\?/,$text);
 if($t1 =~ /windows/i){
  $t1 = \'win\';
 } elsif ($t1 =~ /^koi8-/i){
  $t1 = \'koi\';
 } elsif ($t1 =~ /iso/i){
  $t1 = \'iso\';
 } elsif ($t1 =~ /alt/i){
  $t1 = \'alt\';
 }

 if($t2 eq "B"){
  $t3 = dbase64($t3);
 } elsif ($t2 eq "q"){
  $t3 =~ tr/_/ /;
  $t3 =~ s/=([a-zA-Z0-9]{2})/pack("C",hex($1))/eg;
 }

 $t3 = translate($t1,\'win\',$t3);
 return $t3;
}

sub translit {
 my $name = shift;
 $name =~ s|Я|JA|g;
 $name =~ s|ЙО|JO|g;
 $name =~ s|Ч|CH|g;
 $name =~ s|Ж|ZH|g;
 $name =~ s|Ю|JU|g;
 $name =~ s|[ШЩ]|SH|g;
 $name =~ s|Ц|TS|g;
 $name =~ tr|АБЦДЕЄЭФГХ?ЇИКЛМНОПРСТУВЙЗЁЬЪЫЮ|ABCDEEEFGHIIIKLMNOPRSTUVYZE\'`IU|;

 $name =~ s|я|ja|g;
 $name =~ s|йо|jo|g;
 $name =~ s|ч|ch|g;
 $name =~ s|ж|zh|g;
 $name =~ s|ю|ju|g;
 $name =~ s|[шщ]|sh|g;
 $name =~ s|ц|ts|g;
 $name =~ tr|абцдеєэфгх?їиклмнопрстувйзёьъыю|abcdeeefghiiiklmnoprstuvyze\'`iu|;

 return $name;
}

sub read_letter {
 my @lines = @_;
 my @mess_lines;
 my($par,$val,$last);
 my $is_head = 1;
 my %field;

 foreach (@lines){
  $_ =~ s/\\n//;
  $_ =~ s/\\r//;
  if($_ ne \'\' && $is_head){
   if($_ !~ /^\\t/ && $_ !~ /^\\s{2,}/){
    ($par,$val) = split(\': \',$_,2);
    $field{"\\L$par"} = $val;
    $last = "\\L$par";
   } else {
    $_ =~ s/^\\t+//;
    $_ =~ s/^\\s+//;
    $field{$last}.=$_;
   }
  } else {
   $is_head = 0;
   if($_ !~ /^\\./){push(@mess_lines,$_);}
  }
 }
 
 my($type,$charset,$tr_enc);
 $field{\'content-type\'} = defined $field{\'content-type\'}?$field{\'content-type\'}:\'text/plain\';
 if($field{\'content-type\'} =~ /^text\\/([^;]+)/){
  $type = $1;
  ($charset) = ($field{\'content-type\'} =~ /charset=\\"?([^"]+)\\"?/);
  $charset = defined $charset?$charset:\'koi8-\';
  if($charset =~ /us-ascii/i || $charset =~ /koi8-/i){
   $charset = \'koi\';
  } elsif ($charset =~ /windows/i){
   $charset = \'win\';
  } elsif ($charset =~ /iso/i){
   $charset = \'iso\';
  } elsif ($charset =~ /alt/i){
   $charset = \'alt\';
  } else {
   $charset = \'koi\';
  }
  $tr_enc = defined $field{\'content-transfer-encoding\'}?$field{\'content-transfer-encoding\'}:\'8bit\';
 }

 my ($temp,$i);
 foreach $i(\'from\',\'to\',\'subject\'){
  if(exists $field{$i}){
   if($field{$i} =~ /=\\?.*\\?=/){
    $temp = $field{$i};
    $field{$i} = \'\';
    while(length($temp)){
     $field{$i}.= substr($temp,0,index($temp,\'=?\'));
     substr($temp,0,index($temp,\'=?\')) = \'\';
     if(substr($temp,index($temp,\'=?\'),(index($temp,\'?=\')+2)) =~ /q\\?=$/){
      $field{$i}.= trans(substr($temp,index($temp,\'=?\'),(index($temp,\'?=\',(index($temp,\'?=\')+2))+2)));
      substr($temp,index($temp,\'=?\'),(index($temp,\'?=\',(index($temp,\'?=\')+2))+2)) = \'\';
     } else {
      $field{$i}.= trans(substr($temp,index($temp,\'=?\'),(index($temp,\'?=\')+2)));
      substr($temp,index($temp,\'=?\'),(index($temp,\'?=\')+2)) = \'\';
     }
     if($temp !~ /=\\?/){
      $field{$i}.=$temp;
      $temp = \'\';
     }
    }
   } elsif (defined $charset){
    $field{$i} = translate($charset,\'win\',$field{$i});  
   }
  }
 }

 unshift(@mess_lines,"Content-Type: $field{\'content-type\'}");
 unshift(@mess_lines,"Content-Transfer-Encoding: $field{\'content-transfer-encoding\'}") if exists $field{\'content-transfer-encoding\'};

 single(@mess_lines);
 return($field{from},$field{to},$field{subject});
}
« Последнее редактирование: 06 Сентября 2002, 12:49:02 от Serchey »

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #6 : 06 Сентября 2002, 11:13:26 »
sub single {
 my @mess1 = @_;
 my %param = ();
 my $head = 1;
 my($par,$val,$last);
 my @mess = ();

 while($mess1[0] eq \'\'){shift(@mess1);}
 foreach(@mess1){
  if($_ ne \'\' && $head){
   if($_ !~ /^\\s{2,}/ && $_ !~ /^\\t/){
    ($par,$val) = split(/: /,$_,2);
    $param{"\\L$par"} = $val;
    $last = "\\L$par";
   } else {
    $_ =~ s/^\\s+//;
    $_ =~ s/^\\t+//;
    $param{$last}.=$_;
   }
  } else {
   $head = 0;
   push(@mess,$_);
  }
 }

 while($mess[0] eq \'\'){shift(@mess);}

 if(exists $param{\'content-type\'} && defined $param{\'content-type\'}){
  if($param{\'content-type\'} =~ /^text\\/([^;]+)/){
   $param{\'type\'} = $1;
   ($param{\'charset\'}) = ($param{\'content-type\'} =~ /charset=\\"?([^"]+)\\"?/);
   $param{\'charset\'} = defined $param{\'charset\'}?$param{\'charset\'}:\'koi8-\';
   if($param{\'charset\'} =~ /us-ascii/i || $param{\'charset\'} =~ /koi8-/i){
    $param{\'charset\'} = \'koi\';
   } elsif ($param{\'charset\'} =~ /windows/i){
    $param{\'charset\'} = \'win\';
   } elsif ($param{\'charset\'} =~ /iso/i){
    $param{\'charset\'} = \'iso\';
   } elsif ($param{\'charset\'} =~ /alt/i){
    $param{\'charset\'} = \'alt\';
   } else {
    $param{\'charset\'} = \'koi\';
   }
   $param{\'tr_enc\'} = defined $param{\'content-transfer-encoding\'}?$param{\'content-transfer-encoding\'}:\'8bit\';
 
   if($param{\'tr_enc\'} =~ /quoted-printable/i){
    my @xtemp_mess = @mess;
    @mess = ();
    my $offs = -1;
    for(my $t = 0; $t < scalar(@xtemp_mess); $t++){
     if(defined $xtemp_mess[($t-1)] && $xtemp_mess[($t-1)] !~ /=$/){
      $offs++;
     }
 
     $xtemp_mess[$t] =~ tr/_/ /;
     $xtemp_mess[$t] =~ s/=([a-zA-Z0-9]{2})/pack("C",hex($1))/eg;
 
     $mess[$offs].= $xtemp_mess[$t];
     $mess[$offs] =~ s/=$//;
    }
   } elsif($param{\'tr_enc\'} =~ /base64/i){
    @mess = dbase64(join(\'\',@mess));
   }
   
   @mess = translate($param{\'charset\'},\'win\',@mess);
   if($param{\'type\'} eq \'html\'){
    foreach(@mess){
     if($_ =~ /\\      $_ =~ s/charset=[^"]+/charset=Windows-1251/;
     }
    }
   }

   open(X,">$tempfile") || die "Can\'t write $tempfile: $!\\n";
   shift(@mess) until $mess[0] ne \'\';
   foreach(@mess){
    print X "$_\\n";
   }
   close X;
 
  } elsif ($param{\'content-type\'} =~ /^multipart\\/([^;]+)/){
   $param{\'type\'} = $1;
   ($param{\'bound\'}) = ($param{\'content-type\'} =~ /boundary=\\"([^"]+)\\"/);
   my @temp_lines = ();
   while($mess[0] !~ /^--$param{\'bound\'}/){shift(@mess);}
   shift(@mess);
   foreach(@mess){
    if($_ =~ /^--$param{\'bound\'}/){
     single(@temp_lines);
     @temp_lines = ();
     if($_ =~ /^--$param{\'bound\'}--/){last;}
    } else {
     push(@temp_lines,$_);
    }
   }
  }
 }
}

sub send_letter {
 my($email,$from,$to,$subj) = @_;
 $from = translit($from);
 $subj = translit($subj);
 $to = translit($to);

 local $/ = \'\';
 open(X,"$tempfile");
 binmode(X);
 my $text = ;
 my $text2;
 close X;
 $text = clear_html($text);
 $text = translit($text);
 $text = "(F:$from T:$to S:$subj) ".$text;
 if(length($text) > 160){$text2 = substr($text,160,160);}
 $text = substr($text,0,160);

 open(SENDMAIL,"|$sendmail");
 print SENDMAIL <<"EOF";
From: $mail_as
To: $email
Subject: SMS part1

$text
EOF
close(SENDMAIL);

if(defined $text2 && $text2 ne \'\'){
 open(SENDMAIL,"|$sendmail");
 print SENDMAIL <<"EOF";
From: $mail_as
To: $email
Subject: SMS part2

$text2
EOF
close(SENDMAIL);
}

}

read_conf();

until($time_to_die){
 foreach $user(sort keys(%users)){
  if((stat("$mail_dir/$user"))[7] ne $size{$user}){
   if((stat("$mail_dir/$user"))[7] > $size{$user}){
    open(X,"$mail_dir/$user");
    binmode(X);
    seek(X,$size{$user},0);
    @lines = ();
    while(){
     $_ =~ s/\\n//;
     $_ =~ s/\\r//;
     push(@lines,$_);
    }
    close X;
    until($lines[0] ne \'\'){shift(@lines);}
    shift(@lines);
    ($from,$to,$subj) = read_letter(@lines);
    send_letter($users{$user},$from,$to,$subj);
   }
   $size{$user} = (stat("$mail_dir/$user"))[7];
  }
 }
 sleep($timerate);
}
« Последнее редактирование: 06 Сентября 2002, 12:50:12 от Serchey »

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #7 : 06 Сентября 2002, 11:23:38 »
В каталоге с прогой создай еще один файл smsender.conf(да, чуть не забыл - прога називается smsender.pl). После чего в него пишешь:
...
serchey 380677748235@2sms.kiyvstar.net #user  mob_email
...

Ставишь все это на почтовом сервере и запускаешь:
shell> ./smsender.pl &

Приимущества следующие:
-кушает почти любой тип даных;
-можно завести много юзверей;
-бесплатно;
-РАБОТАЕТ(иногда, правда, тухнет - я её клёпал на скорую руку и не всё вылезал);

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Отправка смс-сообщений
« Ответ #8 : 06 Сентября 2002, 11:24:03 »
по поводу перевода на транслит, можно сделать так: создать хеш например %alphabet в котором каждой буковке будет соответствовать она только транслитерованная, а потом просто одним регекспом поменять:
while ( my ($cyr, $lat) = each ( %alphabet ) )
{
$message =~ s/$cyr/$lat/g;
}


куда компактнее :)

Serchey  а зачем ты парсишь полностью всю страничку?
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #9 : 06 Сентября 2002, 11:31:20 »
Да, ты забыл упомянуть содержимое %alphabet - я не думаю, что так уж и компактно окажеться... ;) знаю, точнее...

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Отправка смс-сообщений
« Ответ #10 : 06 Сентября 2002, 11:37:16 »
Цитировать
а как быть с Щ,Я,Ю


очень просто:

my %alphabet(..., "Щ", "Sch", ...,  "Ю", "Ju", ..., "Я", "Ja", ...); соответственно и все другие буковки :)

Цитировать
Что значит парсишь?(не понял термина)


parse  (англ.)
1. анализ, разбор  
2. происзводить структурный анализ
3. подбробно, скрупулезно анализировать

Цитировать
ты забыл упомянуть содержимое %alphabet - я не думаю, что так уж и компактно окажеться... ;) знаю, точнее


немножко большой хеш, но просто с точки зрения структуры удобнее, имхо, редактировать код.
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #11 : 06 Сентября 2002, 12:47:58 »
Цитировать
но просто с точки зрения структуры удобнее, имхо, редактировать код

У меня на этот счет свое мнение.... Да, $x=~ tr/aбв/ABC/ работает быстрее(и логичнее) чем перебор такого множества символов.

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #12 : 06 Сентября 2002, 12:55:54 »
Чуть не забыл, то что я привел вверху не самое свежее: слишком много в этой версии служебных инф. Если кто захочет может написать мне - вышлю fresh-версию. Она у меня на почтовике пока, усовершенствованная.

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Отправка смс-сообщений
« Ответ #13 : 06 Сентября 2002, 15:03:00 »
TMTOWTDI :) но, имхо, код компактнее ;)
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Отправка смс-сообщений
« Ответ #14 : 06 Сентября 2002, 17:28:13 »
USE, опять я тебя не понял... торможу, что ли?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28