"Trace begun at C:\Perl64\site\lib\Email\Sender\Simple.pm line 116 Email::Sender::Simple::send_email('Email::Sender::Simple', 'Email::Abstract=ARRAY(0x37e3680)', 'HASH(0x37e6410)') called at C:\Perl64\site\lib\Email\Sender\Role\CommonSending.pm line 45 Email::Sender::Role::CommonSending::try {...} at C:\Perl64\site\lib\Try\Tiny.pm line 102 eval {...} at C:\Perl64\site\lib\Try\Tiny.pm line 93 Try::Tiny::try('CODE(0x37e6890)', 'Try::Tiny::Catch=REF(0x37de6f0)') called at C:\Perl64\site\lib\Email\Sender\Role\CommonSending.pm line 58 Email::Sender::Role::CommonSending::send('Email::Sender::Simple', 'Email::Simple=HASH(0x37de978)', 'HASH(0x37e6560)') called at C:\Perl64\lib\Sub\Exporter\Util.pm line 18 Sub::Exporter::Util::__ANON__('Email::Simple=HASH(0x37de978)', 'HASH(0x37e6560)') called at C:\receivesms\flowroute-sms-db.pl line 116 main::try {...} at C:\Perl64\site\lib\Try\Tiny.pm line 102 eval {...} at C:\Perl64\site\lib\Try\Tiny.pm line 93 Try::Tiny::try('CODE(0x37cf828)', 'Try::Tiny::Catch=REF(0x1d38100)') called at C:\receivesms\flowroute-sms-db.pl line 119" #### #!perl # # Author: Fred Posner # Twitter: @fredposner # Contact: http://qxork.com # Date: 2016-03-18 # Copyright: The Palner Group, Inc. # License: GPLv3 # use strict; use warnings; # # need CGI, JSON, # MIME::LITE for email, # and DBI/DBD::mysql for DB operations. # use CGI (); use JSON (); use JSON::API; use DBI; use MIME::Lite; use JSON::XS; # # Declare variables # my ($email, $input); my $q = CGI->new; my $json = JSON->new->utf8; if ($q->multi_param('POSTDATA')) { $input = $json->decode( $q->multi_param('POSTDATA') ); } else { &SimpleJSONResponse("error","no JSON data found"); exit(0); } # # test that all sms values exist # if not, return error # #($input->{to}) && ($input->{from}) && ($input->{body}) && ($input->{id}) my $a = 10; unless ($a >= 0){ # # if we don't get the required fields from flowroute, # return an error # &SimpleJSONResponse("error","required fields not present"); } else { # # we received the required fields from flowroute # connect to database # my $data_source = "DBI:mysql:database=flowroute;host=localhost"; my $user = "flowroute"; my $password = "xxxx"; my $dbh = DBI->connect($data_source, $user, $password) or die &SimpleJSONResponse("error","cannot connect to db"); # # run stored procedure add_sms # stores sms to database and returns the email address # my $sql = "call add_sms(?, ?, ?, ?)"; my $sth = $dbh->prepare($sql) or die &SimpleJSONResponse("error","cannot prepare sql"); $sth->execute($input->{data}{attributes}{to}, $input->{data}{attributes}{from}, $input->{data}{id}, $input->{data}{attributes}{body}); while ( my $row = $sth->fetchrow_arrayref() ) { my ($result) = @$row; if ($result) { $email = $result; } else { $email = "error"; } } if ($email eq "fail") { # # procedure returned "fail" # &SimpleJSONResponse("error","unable to find did"); } elsif ($email eq "error") { # # procedure did not return a response # &SimpleJSONResponse("error","unknown sql error"); } else { use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTP::TLS; use Try::Tiny; my $transport = Email::Sender::Transport::SMTP::TLS->new( host => 'smtp.office365.com', port => 587, username => 'xxx@xxx.com', password => 'password', ); use Email::Simple::Creator; # or other Email:: my $message = Email::Simple->create( header => [ From => 'sales@pawnshopmgmt.com', To => $email, Subject => 'New Text Message', ], body => "Sent to: " . $input->{data}{attributes}{to} . "\n\nSent from: " . $input->{data}{attributes}{from} . "\n\nSMS: " . $input->{data}{attributes}{body} #. "\n\nMedia: " . $input->{included}{0}{attributes}{url} ); try { sendmail($message, { transport => $transport }); } catch { die print "Error sending email: $_"; }; } } # # Subroutines # sub SimpleJSONResponse() { my($key, $value) = @_; print $q->header(-type => "application/vnd.api+json", -charset => "utf-8"); print $json->encode({ $key => $value }); } print "HTTP/1.0 200 OK\n"; print "Content-Type: text/html\n\n\n";