From: short <> Date: Wed, 19 Mar 2003 00:22:54 +0000 (+0000) Subject: Send SMS by the paid WWW::SMS X-Git-Tag: bp_lace~60 X-Git-Url: http://git.jankratochvil.net/?p=PerlMail.git;a=commitdiff_plain;h=dc95c42776248b09813d8722216e1cef47310163 Send SMS by the paid WWW::SMS +Respect "$HOME/idle" file SMS idle max: 60 -> 120 --- diff --git a/Makefile.PL b/Makefile.PL index 67f3d69..c67d531 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -40,6 +40,7 @@ WriteMakefile( "Sys::Syslog"=>0, "URI::Escape"=>0, "User::Utmp"=>0, + "WWW::SMS::TMobileCZ"=>0, }, "EXE_FILES"=>["lacemail-accept","lacemail-submit","lacemail-sendmail","contacts-n9k2mutt"], ); diff --git a/perlmail-accept b/perlmail-accept index 43b4d62..f51f0db 100755 --- a/perlmail-accept +++ b/perlmail-accept @@ -46,16 +46,17 @@ require HTTP::Cookies; require HTTP::Request; require LWP::UserAgent; use URI::Escape 'uri_escape'; +require WWW::SMS; my $HOME="/home/lace"; my $Mail="$HOME/Mail"; my @ValidUsers=qw(root lace short kratochvil _local); -my $IdleMax=60; +my $IdleMax=120; my $MaxBodySMS=0x1000; # max bytes to pass to Lingua::EN::Squeeze my $SMSmailError='short+err@ucw.cz'; -my $SMSwebRcpt='00420602431329'; -my $SMSmailRcpt=$SMSwebRcpt.'@sms.eurotel.cz'; +my @SMSwebRcpt=qw(420 602 431329); +my $SMSwebRcpt_username="lace2"; my $SMScontact=''; our($Message,$Audit,@AuditStored,$store_ignore,$store_ignorenewmail,$store_profile,$DoBell); @@ -141,6 +142,7 @@ sub bell sub useridle { + return 0 if ! -e $ENV{"HOME"}."/idle"; my %valid_users=map(($_=>1),@ValidUsers); my($idlebest,$linebest); for my $utmp (User::Utmp::getut(),{ "ut_line"=>"psaux" }) { @@ -245,129 +247,6 @@ my($smsi,$smscount)=@_; return ""; } -# FIXME: rewrite &send_cz_eurotel properly by own code -# patch for http://kiwi.ms.mff.cuni.cz/%7Etom/programming/src/sendsms.tar.gz/sendsms.pl -my $agent=LWP::UserAgent->new(); -$agent->agent("LaceMail $VERSION; contact=$SMScontact; "); -my($request1,$response1); # for &send_cz_eurotel -my($name,$value,$type,$disabled,$q2); - -# &send_cz_eurotel returns: error -# BEGIN http://kiwi.ms.mff.cuni.cz/%7Etom/programming/src/sendsms.tar.gz/sendsms.pl -sub parse_inputs -{ - my ($resp) = @_; - my @inputs; - my $ct; - my @c; - $ct=$resp->content(); - - @c=split '>', $ct; - grep { - if (/(]*)(>|$)/i) { - my $txt=$2, $name="", $value="", $type="x", $disabled=0; - my $ipoc; - if ($txt =~ /type="([^"]*)"/i) { $type=$1; } - elsif ($txt =~ /type=([^" ]*)[ >]/i) { $type=$1; } - if ($txt =~ /name="([^"]*)"/i) { $name=$1; } - elsif ($txt =~ /name=([^" ]*)[ >]/i) { $name=$1; } - if ($txt =~ /value="([^"]*)"/i) { $value=$1; } - elsif ($txt =~ /value=([^" ]*)[ >]/i) { $value=$1; } - if ($txt =~ /disabled/i) { $disabled=1; } - if ($name ne "" && $type ne "" && $type ne "button" && ! $disabled) - { - $ipoc=$#inputs; - $inputs[$ipoc+1][0]=$name; - $inputs[$ipoc+1][1]=$value; - } - } - 0; } @c; - return @inputs; -} - -sub make_query -{ - my (@inputs) = @_; - - my $i; - my $query = ""; - - for ($i=0; $i<=$#inputs; $i++) - { - my($q1, $q2); - if ($i>0) { $query="$query&"; } - $q1=uri_escape($inputs[$i][0]); - $q2=uri_escape($inputs[$i][1]); - $query="$query$q1=$q2"; - } - - #change @ and space back - $query=~ s/%20/+/g; - $query=~ s/%40/@/g; - return $query; -} - -sub send_cz_eurotel -{ - my ($id,$text,$mail,$directd) = @_; - my $src_url = "http://www2.eurotel.cz/sms/index.html"; - my @inputs; - my $query = ""; - my $cookie = HTTP::Cookies->new; - my $pref; - - #check if correct number - if (substr($id,0,5)!="00420") { return -1; } - $pref=substr($id,5,3); - if (!($pref eq "601" || $pref eq "602" || $pref eq "606" || $pref eq "607" || ($pref ge "720" && $pref le "729"))) { return -1; } - - #get form page, extract cookies - $request1=new HTTP::Request('GET', "$src_url?n_pagestyle=new"); - $response1=$agent->request($request1); - if ($response1->code != 200) { return -3; } - $cookie->extract_cookies($response1); - - #parse the form - @inputs=parse_inputs($response1); - - #fill the form - $inputs[2][1]=substr($id,5,3); - $inputs[3][1]=substr($id,8,6); - $inputs[4][1]=$mail; - - #direct display - $inputs[6][1]="sms"; - $inputs[6][1]="show" if ($directd>0); - - $inputs[7][1]=$text; - -# for ($i=0; $i<=$#inputs; $i++) { print "[$i] $inputs[$i][0] $inputs[$i][1]\n"; } - - #make query - $query=make_query(@inputs); - - #POST the form - my $header = new HTTP::Headers( - 'Content-Length' => length($query), - 'Content-Type' => 'application/x-www-form-urlencoded', - 'Accept' => '*/*', - 'Referer' => $src_url - ); - my $request2 = new HTTP::Request('POST',$src_url, $header, $query); - $cookie->add_cookie_header($request2); - my $response2 = $agent->request($request2); - - if ($response2->code != 200) { return -3; } - - #check for success - if ($response2->content() !~ /byla.*odesl.*na na SMS centrum/) - { - return -2; - } - return 0; -} -# END http://kiwi.ms.mff.cuni.cz/%7Etom/programming/src/sendsms.tar.gz/sendsms.pl - sub smslens { my($ignorenewmail,$smscount,%args)=@_; @@ -379,8 +258,7 @@ my($ignorenewmail,$smscount,%args)=@_; $l-=length(smsbuild($_,$smscount)); } else { # send by web - $l-=length("Z WWW x/5: "); - $l-=length(smsbuild($_,POSIX::ceil($smscount/5))); + $l-=6; # 154 is the max length before split; why? } $l; } (0..$smscount-1)); @@ -396,7 +274,18 @@ my($squeezed,$smscount,@lens)=@_; $squeezed=~/^.{0,$len}/s; my $frag=$&; $squeezed=$'; - return 0 if send_cz_eurotel($SMSwebRcpt,$frag,"",0); + return 0 if 3!=@SMSwebRcpt; + local *F; + open F,"$HOME/priv/WWW-SMS-$SMSwebRcpt_username.pwd" or return 0; + my $pwd=; + chomp $pwd; + close F; + my $sms=WWW::SMS->new(@SMSwebRcpt,$frag,"username"=>$SMSwebRcpt_username,"passwd"=>$pwd); + for ($sms->gateways("sorted"=>"reliability")) { + last if $sms->send($_); + Sys::Syslog::syslog("warning","Web SMS send failed: %s",$WWW::SMS::Error); + my $void=$WWW::SMS::Error; # Prevent: Name "WWW::SMS::Error" used only once + } } return 1; } @@ -405,27 +294,7 @@ sub smssend_mail { my($squeezed,$smscount,@lens)=@_; - my $recalclen=0; - for ($smscount=0;$recalclennew("sendmail","-f","$SMSmailError"); - $mail->open({ - "To"=>$SMSmailRcpt, - "From"=>$SMSmailError, # no longer displayed anyway - "X-LaceMail-Version"=>$VERSION, - "X-LaceMail-Contact"=>$SMScontact, - }); - print $mail smsbuild($smsi,$smscount).$frag."\n"; - # FIXME: check errors - $mail->close(); - } - return 1; + return 0; } sub smssend