How to send free SMS from command line #perl API

Following is the script that I am using from last several weeks for sending SMS's from command line. Note : This has been taken from Arulalan.T Blog[0] from here : [1] .
?Download download.txt
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
 
 
#!/usr/bin/perl
###############################################################################################
# source link : http://digitalpbk.com/2009/12/perl-script-send-free-sms-any-mobile-number-india-using-way2sms
# From CPAN : from CPAN link itself you can download the source for way2sms.
#
# Modified by : Arulalan.T (arulalant@gmail.com)
#
# Goal : send sms through way2sms.com with few easy options. So I modified this below code accordingly.
#
# Note : This should work only to the Indian regions cell phone numbers only
#
# Usage :
# Save this file in the path /usr/bin/sms and make it as excutable by setting permission
# 1. $ sms 9876543210 'hello'
# 2. $ sms 9876543210,9876501234,9988776655 'hai dude'
# 3. $ sms -f sms-nos-list-file 'message'
# sms-nos-list-file is a text file, that contains the 10 digit phone nos with new line character.
# i.e. each line must have only one phone no.
# We no need to use +91 or 0 prefix no. So use only 10 digit phone no alone.
####################################################################################################
 
use WWW::Mechanize;
use Compress::Zlib;
 
my $mech = WWW::Mechanize->new();
 
my $username = "way2sms login username"; #fill in username here
my $keyword = "password"; #fill in password here
 
my ($text,$mobile,$option);
my @mobilenos;
$option = $ARGV[0];
 
if ( $option == "-f") {
# reading file and collecting the nos
my $smslistfile = $ARGV[1];
$text = $ARGV[2];
open(FILE,$smslistfile) or die "Can not open file\n";
@mobilenos = ;
close FILE;
}
else{
my $morenos = $ARGV[0];
if (length($morenos) > 10) {
# splitting nos with comma seperated in the first arg
@mobilenos = split(',',$morenos);
}
else {
# for single phone no
@mobilenos = $morenos;
}
# collecting message to send
$text = $ARGV[1];
}
 
$deb = 1;
 
print "Total Character of message is ".length($text)."\n" if($deb);
 
$text = $text."\n\n\n\n\n" if(length($text) < 135); $mech->get("http://wwwl.way2sms.com/content/index.html");
unless($mech->success())
{
exit;
}
$dest = $mech->response->content;
 
print "Fetching...\n" if($deb);
 
if($mech->response->header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
$mech->update_html($dest);
}
 
$dest =~ s/
 
<form action="..\/auth.cl" name="loginForm">update_html($dest);
$mech-&gt;form_with_fields(("username","password"));
$mech-&gt;field("username",$username);
$mech-&gt;field("password",$keyword);</form>print "Loggin...\n" if($deb);
 
$mech-&gt;submit_form();
 
$dest= $mech-&gt;response-&gt;content;
 
if($mech-&gt;response-&gt;header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
$mech-&gt;update_html($dest);
}
 
foreach $mobile (@mobilenos){
# for loop begins
chomp($mobile);
print "\nMessage sending to ".($mobile)."\n";
 
$mech-&gt;get("http://wwwl.way2sms.com//jsp/InstantSMS.jsp?val=0");
$dest= $mech-&gt;response-&gt;content;
if($mech-&gt;response-&gt;header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
$mech-&gt;update_html($dest);
}
 
print "Sending ... \n" if($deb);
 
$mech-&gt;form_with_fields(("MobNo","textArea"));
$mech-&gt;field("MobNo",$mobile);
$mech-&gt;field("textArea",$text);
$mech-&gt;submit_form();
 
if($mech-&gt;success())
{
print "Done \n" if($deb);
}
else
{
print "Failed \n" if($deb);
exit;
}
 
$dest = $mech-&gt;response-&gt;content;
if($mech-&gt;response-&gt;header("Content-Encoding") eq "gzip")
{
$dest = Compress::Zlib::memGunzip($dest);
#print $dest if($deb);
}
 
if($dest =~ m/successfully/sig)
{
print "Message sent successfully \n" if($deb);
}
 
# foreach loop ends
}
 
print "Message sent to all the numbers\n Bye.\n";
exit;
#EOF
[0] : http://tuxcoder.wordpress.com/ [1] : http://tuxcoder.wordpress.com/2011/06/14/send-free-sms-in-india-via-way2sms-login-from-terminal-using-perl-code/
  • Vishlesh

    will it work on fedora?
     

    • http://gauravpaliwal.com gauravpaliwal

      yes, it will work if all the libraries are existing.

      • Aman

         Getting this error, can you help ?

        /usr/bin/sms 9999999999 ‘hi’
        Can’t locate WWW/Mechanize.pm in @INC (@INC contains: /usr/opt/perl5/lib/5.8.8/aix-thread-multi /usr/opt/perl5/lib/5.8.8 /usr/opt/perl5/lib/site_perl/5.8.8/aix-thread-multi /usr/opt/perl5/lib/site_perl/5.8.8 /usr/opt/perl5/lib/site_perl .) at /usr/bin/sms line 22.
        BEGIN failed–compilation aborted at /usr/bin/sms line 22.

        • http://gauravpaliwal.com gauravpaliwal

          You need to install : WWW/Mechanize.pm using cpan.

          • Aman

             I downloaded Mechanize.pm  and copied under

            cp Mechanize.pm /usr/opt/perl5/lib/5.8.2/WWW/.

            Now getting new error. I will appreciate some help on this.

            /usr/bin/sms 99999999999 ‘hi’

            Can’t locate HTTP/Response/Encoding.pm in @INC (@INC contains: /usr/opt/perl5/lib/5.8.2/aix-thread-multi /usr/opt/perl5/lib/5.8.2 /usr/opt/perl5/lib/site_perl/5.8.2/aix-thread-multi /usr/opt/perl5/lib/site_perl/5.8.2 /usr/opt/perl5/lib/site_perl .) at /usr/opt/perl5/lib/5.8.2/WWW/Mechanize.pm line 109.
            BEGIN failed–compilation aborted at /usr/opt/perl5/lib/5.8.2/WWW/Mechanize.pm line 109.
            Compilation failed in require at /usr/bin/sms line 22.
            BEGIN failed–compilation aborted at /usr/bin/sms line 22.

          • http://gauravpaliwal.com gauravpaliwal