#!/usr/bin/perl BEGIN { use lib '/usr/home/cfg' ; require push_inc ; } use MIME::Lite; use Mail::Sendmail; require cfg ; print "Content-type: text/html\n\n"; &today ; our $debug = 1 ; #------------------------------------------------------------------------------------------ # https://itvadmin.co.za/cgi-bin/scripts/admin/oneoff/sendmail.pl use CGI::Carp qw(fatalsToBrowser); $email_add{'reply-to'} = 'info@telemedia.co.za' ; # &mailsend('','rory@mathew.za.net',"mailsend ffwaybill Test $now_year-$now_mm-$now_dd",'test email') ; # &common_mailsend_sendgrid('text','rory@kre8it.co.za','TEST - Tue 30-Apr-2024','Hi Rory Mathew

TEST AT 14:00








Please let me know if you need anything.

Thanks,
Rory Mathew','/var/www/html/pdf/feed_details','Feed_Details-1003.pdf','Test Events','events@interactivetvafrica.com','','rory@kre8it.co.za','','') ; # &common_mailsend_sendgrid('text','rory@kre8it.co.za','TEST - Tue 30-Apr-2024','testing 123','/var/www/html/pdf/event_details','Event_Details-5136.pdf','ITV Africa Events','events@itvadmin.co.za','','','',0) ; &mailsend_sendgrid('text','rory@kre8it.co.za','TEST - Tue 30-Apr-2024','testing 123','/var/www/html/pdf/event_details','Event_Details-5136.pdf','Telemedia Events','website@bookingtelemedia.co.za','','','',0) ; # &common_send_mail('rory@kre8it.co.za','','','','','test msg','TEST - Tue 30-Apr-2024') ; exit ; #------------------------------------------------------------------------------------------ sub mailsend_sendgrid { local ($qtype,$qemail,$qsubject,$qbody,$qattachfilepath,$qattachfilename,$qfromname,$qfromemail,$qccemail,$qbccemail,$uploaded_doc,$operator_email) = @_; $qccemail =~ s/\;/\,/g ; $qbccemail =~ s/\;/\,/g ; use Email::SendGrid::V3; &common_debug("common_mailsend_sendgrid [$qtype,$qemail,$qsubject,$qbody,$qattachfilepath,$qattachfilename,$qfromname,$qfromemail,$qccemail,$qbccemail,$uploaded_doc,$operator_email]") ; #======================= #REF1: https://docs.sendgrid.com/for-developers/sending-email/curl-examples #REF2: https://github.com/GrantStreetGroup/Email-SendGrid-V3 #To Install: #cpan -i Email::SendGrid::V3 #cd /root/perl5/lib/perl5 #cp -R Email /usr/local/lib64/perl5 #======================= my $sg = Email::SendGrid::V3->new(api_key => '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'); $qbody =~ s/'/`/gi; $qbody =~ s/\r//gi; $qbody =~ s/\n//gi; #------------------------------------------------ #SEND TEXT ONLY MAIL if ($qtype eq "text") { # , cc => [ $qccemail ], bcc => [ $qbccemail ] my %cc_args = ($qccemail) ? (cc => [ "$qccemail" ]) : () ; my %bcc_args = ($qbccemail) ? (bcc => [ "$qbccemail" ]) : () ; my $result = $sg->from($qfromemail,$qfromname) ->reply_to($email_add{'reply-to'}, "$useropts{short} Events") ->subject($qsubject) ->add_content('text/plain', $qbody) ->add_envelope( to => [ "$qemail" ], %cc_args, %bcc_args) ->send; $qres = $result->{success} ? "success" : "error: " . $result->{reason}; } #------------------------------------------------ #SEND HTML ONLY MAIL if ($qtype eq "html") { $qbody = qq~ Film Freight

$qbody



~; my %cc_args = ($qccemail) ? (cc => [ "$qccemail" ]) : () ; my %bcc_args = ($qbccemail) ? (bcc => [ "$qbccemail" ]) : () ; my $result = $sg->from($qfromemail,$qfromname) ->reply_to($email_add{'reply-to'}, "$useropts{short} Feeds") ->subject($qsubject) ->add_content('text/html', $qbody) ->add_envelope( to => [ "$qemail" ], %cc_args, %bcc_args) ->send; $qres = $result->{success} ? "success" : "error: " . $result->{reason}; } #------------------------------------------------ #SEND HTML WITH ATTACHMENT MAIL if ($qtype eq "htmlattach") { my $encodedcontent = &encode_attachment("$qattachfilepath/$qattachfilename"); my %args = ( type => 'AUTO', disposition => 'attachment' ); $qbody = qq~ Film Freight

$qbody



~; my @attachments = ($qattachfilename, $encodedcontent, %args) ; if ($uploaded_doc) { my $encodedcontent = &encode_attachment("$uploaded_doc") ; push @attachments, ($uploaded_doc, $encodedcontent, %args) ; } # if ($operator_email) { # my $encodedcontent = &encode_attachment("$htmlpath/pdf/operator_flyer") ; # push @attachments, ("operator_email_attach.pdf", $encodedcontent, %args) ; # } my %cc_args = ($qccemail) ? (cc => [ "$qccemail" ]) : () ; my %bcc_args = ($qbccemail) ? (bcc => [ "$qbccemail" ]) : () ; my $result = $sg->from($qfromemail,$qfromname) ->reply_to($email_add{'reply-to'}, "$useropts{short} Feeds") ->subject($qsubject) ->add_content('text/html', $qbody) ->add_attachment(@attachments) ->add_envelope( to => [ "$qemail" ], %cc_args, %bcc_args) ->send; $qres = $result->{success} ? "success" : "error: " . $result->{reason}; #NOTE: Cannot use command line cURL here as the body (base64 pdf) is too large - below works for smaller content #$qres = `/usr/bin/curl --request POST --url https://api.sendgrid.com/v3/mail/send --header 'authorization: Bearer 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' --header 'Content-Type: application/json' --data '{"personalizations": [{"to": [{"email": "$qemail"}]}],"from": {"email": "no-reply\@myappointment.co.za"},"subject":"$qsubject","content": [{"type": "text/html","value": "$qbody"}], "attachments": [{"content": "$encodedcontent", "type": "text/plain", "filename": "$qattachfilename"}]}'`; } #------------------------------------------------ &common_debug("common_mailsend_sendgrid [$qres]") ; return "$qres"; } #------------------------------------------------------------------------------------------ # sub SendEmailSendgrid { # local($qtype,$qemail,$qsubject,$qbody,$qattachfilepath,$qattachfilename,$qfromname,$qfromemail) = @_; # use Email::SendGrid::V3; # #======================= # #REF1: https://docs.sendgrid.com/for-developers/sending-email/curl-examples # #REF2: https://github.com/GrantStreetGroup/Email-SendGrid-V3 # #To Install: # #cpan -i Email::SendGrid::V3 # #cd /root/perl5/lib/perl5 # #cp -R Email /usr/local/lib64/perl5 # #======================= # my $sg = Email::SendGrid::V3->new(api_key => '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'); # $qbody =~ s/'/`/gi; # #$qbody =~ s/"/\\\"/gi; # $qbody =~ s/\r//gi; # $qbody =~ s/\n//gi; # #------------------------------------------------ # #SEND TEXT ONLY MAIL # if ($qtype eq "text") { # my $result = $sg->from($qfromemail,$qfromname) # ->reply_to('filmfreight@filmfreight.co.za', 'Film Freight') # ->subject($qsubject) # ->add_content('text/plain', $qbody) # ->add_envelope( to => [ $qemail ] ) # ->send; # $qres = $result->{success} ? "success" : "error: " . $result->{reason}; # } # #------------------------------------------------ # #SEND HTML ONLY MAIL # if ($qtype eq "html") { # $qbody = qq~ # # # # Untitled Document # # # #

# #

#

# $qbody #

#
#
# # # ~; # my $result = $sg->from($qfromemail,$qfromname) # ->reply_to('filmfreight@filmfreight.co.za', 'Film Freight') # ->subject($qsubject) # ->add_content('text/html', $qbody) # ->add_envelope( to => [ $qemail ] ) # ->send; # $qres = $result->{success} ? "success" : "error: " . $result->{reason}; # } # #------------------------------------------------ # #SEND HTML WITH ATTACHMENT MAIL # if ($qtype eq "htmlattach") { # use MIME::Base64 qw(encode_base64); # open (infile, "$qattachfilepath/$qattachfilename"); # binmode infile; # while () { # #$_ =~ s/\r//gi; # #$_ =~ s/\n//gi; # $myfilecontents .= "$_"; # } # close(infile); # $encodedcontent = encode_base64($myfilecontents); # $encodedcontent =~ s/'/`/gi; # #$encodedcontent =~ s/"/\\\"/gi; # $encodedcontent =~ s/\r//gi; # $encodedcontent =~ s/\n//gi; # my %args = ( # type => 'text/plain', # disposition => 'attachment' # ); # my $result = $sg->from($qfromemail,$qfromname) # ->reply_to('filmfreight@filmfreight.co.za', 'Film Freight') # ->subject($qsubject) # ->add_content('text/html', $qbody) # ->add_attachment($qattachfilename, $encodedcontent, %args) # ->add_envelope( to => [ $qemail ] ) # ->send; # $qres = $result->{success} ? "success" : "error: " . $result->{reason}; # #NOTE: Cannot use command line cURL here as the body (base64 pdf) is too large - below works for smaller content # #$qres = `/usr/bin/curl --request POST --url https://api.sendgrid.com/v3/mail/send --header 'authorization: Bearer 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' --header 'Content-Type: application/json' --data '{"personalizations": [{"to": [{"email": "$qemail"}]}],"from": {"email": "no-reply\@myappointment.co.za"},"subject":"$qsubject","content": [{"type": "text/html","value": "$qbody"}], "attachments": [{"content": "$encodedcontent", "type": "text/plain", "filename": "$qattachfilename"}]}'`; # } # #------------------------------------------------ # #log all mail sends here # # $datetime = `date "+%Y-%m-%d %H:%M"`; # # chop($datetime); # # open (logfile, ">> $basedir/admin/SendGrid.log"); # # print logfile "$datetime $qtype $qemail $qsubject $qattachfilename $qfromname $qfromemail $qres\n"; # # close(logfile); # return "$qres"; # } #------------------------------------------------------------------------------------------ # sub smtp_mail_auth { # my ($to,$cc,$email_bcc,$email_subject,$email_message,$html,$thead) = @_ ; # return unless $email_message ; # return unless $email_subject ; # use Time::HiRes qw( gettimeofday ); # use MIME::Lite; # use Net::SMTP_auth; # my $email_from = $user ; # $email_to = ($to) ? $to : $email_from ; # $email_to =~ s/\s+//; # Strip out any whitespace # my ($s, $usec) = gettimeofday(); # my $email_message_id = "<$s$usec\@mailserver.filmfreight.co.za>" ; # my $email_mailed_by = "filmfreight.co.za" ; # my $email_from_display = qq("$sig ($email_from_prefix) ($ibookref)" <$email_from>) ; # $msg = MIME::Lite -> new( # 'Message-ID' => $email_message_id, # 'Mailed-By:' => $email_mailed_by, # 'From' => $email_from_display, # 'To' => $email_to, # 'Bcc' => $email_bcc, # 'Subject' => $email_subject, # 'Type' => 'multipart/mixed' # ); # $msg -> attach( # 'Type' => 'text/plain', # 'Data' => $email_message # ); # my $email = $msg -> as_string(); # my $smtp_host = 'filmfreight-co-za.mail.protection.outlook.com'; # my $smtp_port = 25; # my $smtp = Net::SMTP_auth -> new ($smtp_host, Port=>$smtp_port) or die "Can't connect"; # # $smtp->auth('NORMAL', $email_from, 'Roq80545') or die "Error:" . $smtp->message(); # $smtp->auth('OAuth2', $email_from, 'Roq80545') or die "Error:" . $smtp->message(); # # $smtp->auth('AUTH', $user, $pass) or die "Error:" . $smtp->message(); # # die "Couldn't login: $!" unless \&auth; # $smtp->mail($email_from) or die "Error:" . $smtp->message(); # $smtp->recipient(split(/;/, $email_to)); # $smtp->data() or die "Error:" . $smtp->message(); # $smtp->datasend($email) or die "Error:" . $smtp->message(); # $smtp->dataend() or die "Error:" . $smtp->message(); # $smtp->quit or die "Error:" . $smtp->message(); # } #------------------------------------------------------------------------------------------ # sub auth { # my $sasl; # my $mechanisms = ['AUTH', 500]; # my $sasl = Authen::SASL->new( # mechanism => $mechanisms, # debug => 1, # callback => { # user => $user, # pass => $pass, # authname => $user, # } # ); # } #------------------------------------------------------------------------------------------ # sub smtp_mail { # my ($to,$cc,$bcc,$subj,$msg,$html,$thead) = @_ ; # return unless $msg ; # return unless $subj ; # # use Mail::Sendmail; # $to = $user unless $to ; # # use Net::SMTP 3.0; # # Force use of Authen::SASL::Perl - it may fix problems with other alternatives # # use Authen::SASL qw(Perl); # # Port => "587", # # doSSL => "starttls", # # SSL_version => "TLSv1_1", # # Debug => 4 # use Net::SMTPS; # my $smtp = Net::SMTPS->new("filmfreight-co-za.mail.protection.outlook.com", Port => 25); die "Initialization failed: $!" if !defined $smtp; # my $sender = $user ; # print "Trying to authenticate.."; # # $smtp->auth('OAuth2', $user, $pass) or die "could not authenticate : $!\n"; # &auth or die "Couldn't login: $!" ; # my $receiver = $to; # $smtp->mail( $sender ); # $smtp->to( $receiver ); # $smtp->data() or die "Error:" . $smtp->message(); # $smtp->datasend( "To: $receiver\n" ) or die "Error:" . $smtp->message(); # $smtp->datasend( "From: $sender\n" ) or die "Error:" . $smtp->message(); # $smtp->datasend( "Content-Type: text/html\n" ) or die "Error:" . $smtp->message(); # $smtp->datasend( "Subject: Testing Net::SMTP" ) or die "Error:" . $smtp->message(); # $smtp->datasend( "\n" ) or die "Error:" . $smtp->message(); # $smtp->datasend( 'The body of the email' ) or die "Error:" . $smtp->message(); # $smtp->dataend() or die "Error:" . $smtp->message(); # $smtp->quit() or die "Error:" . $smtp->message(); # } #------------------------------------------------------------------------------------------ # sub smtp_tls_mail { # my ($to,$cc,$bcc,$subj,$msg,$html,$thead) = @_ ; # return unless $msg ; # return unless $subj ; # my $user = 'pod@filmfreight.co.za' ; # $to = $user unless $to ; # use Net::SMTP::TLS; # my $mailer = new Net::SMTP::TLS( # # 'smtp.office365.com', # # 'mail.protection.outlook.com', # # 'o365info-com.mail.protection.outlook.com', # 'filmfreight-co-za.mail.protection.outlook.com', # # Port => 587, # Port => 25, # Hello => '', # User => "$user", # # SSL_version => "TLSv1_2", # Password => 'Roq80545', # Debug => 1) || die "Cannot connect to smtp server"; # $mailer->mail($user); # $mailer->to($to); # $mailer->data; # $mailer->datasend("\n"); # $mailer->datasend("Sent from perl!"); # $mailer->dataend; # $mailer->quit; # } #------------------------------------------------------------------------------------------ # sub smtp_mail_1 { # my ($to,$cc,$bcc,$subj,$msg,$html,$thead) = @_ ; # use Mail::Sendmail; # $to = $user unless $to ; # my %mail = () ; # %mail = ( # smtp => 'localhost', # From => $user, # To => $to, # Cc => $cc, # Bcc => $bcc, # Subject => $subj # ); # $mail{smtp} = "smtp.afrihost.co.za"; # $mail{port} = 25; # $mail{Auth} = {user => $user, pass => 'PvB{Da{8($ow'}; # $mail{body} = < # # # # # # #

# #

#

# $msg #

# # # $boundary-- # END_OF_BODY # } # sendmail(%mail) ; # } #------------------------------------------------------------------------------------------ use today ; use common ; # use mailsend ; 1;