MailTransport refactoring

This commit is contained in:
Rainer Gümpelein 2022-01-12 20:09:55 +01:00
parent 7a54a35b00
commit 9082b161de
5 changed files with 44 additions and 239 deletions

View file

@ -283,7 +283,7 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki
#keep in mind, it works on operator dependency #keep in mind, it works on operator dependency
$bw->log("user_miniquery via $varenv{dbname} exist count:",$authraw->{int23},""); $bw->log("user_miniquery via $varenv{dbname} exist count:",$authraw->{int23},"");
#Nur für project=Bayern und für Entwickler aktiviert #Nur für project=Bayern und für Entwickler aktiviert
if($booking_values->{state} eq "available" && (($dbt->{operator}->{$varenv{dbname}}->{project} eq "Bayern" && $authraw->{int23} >= 1 && $authraw->{int23} < 4) || ($authraw->{c_id} == 1842 || $authraw->{c_id} == 5781 || $authraw->{c_id} == 11765 || $authraw->{c_id} == 1843))){ if($booking_values->{state} eq "available" && $dbt->{operator}->{$varenv{dbname}}->{project} eq "Bayern" && (($authraw->{int23} >= 1 && $authraw->{int23} < 4) || ($authraw->{c_id} == 1842 || $authraw->{c_id} == 5781 || $authraw->{c_id} == 11765 || $authraw->{c_id} == 1843))){
#TODO $ user_miniquery have to be in db table on primary #TODO $ user_miniquery have to be in db table on primary
$bw->log("user_miniquery communicated to user ID",$authraw->{c_id},""); $bw->log("user_miniquery communicated to user ID",$authraw->{c_id},"");

View file

@ -203,7 +203,7 @@ sub handler {
#we need this to get $R::sessionid to FormEdit #we need this to get $R::sessionid to FormEdit
#if(length($coo) > 20 && !$q->cookie(-name=>'domcookie')){ #if(length($coo) > 20 && !$q->cookie(-name=>'domcookie')){
($api_return,$users_sharee) = $apif->auth_verify($q,$author->{authcookie},""); ($api_return,$users_sharee) = $apif->auth_verify($q,$author->{authcookie},"");
if($R::failure =~ /\w+/ || ($users_sharee->{txt31} && $users_sharee->{txt31} =~ /\w/)){ if(($returnwww && $returnwww =~ /\w+/) || ($users_sharee->{txt31} && $users_sharee->{txt31} =~ /\w/)){
print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_1}?sessionid=$coo"); print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_1}?sessionid=$coo");
exit 0; exit 0;
}else{ }else{
@ -456,7 +456,7 @@ sub handler {
$dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde
} }
$tk->emailack($users_sharee->{c_id}) if($users_sharee->{int04} != 1); #$tk->emailack($users_sharee->{c_id}) if($users_sharee->{int04} != 1);
$dbt->update_operatorsloop($varenv{dbname},$users_sharee->{c_id},"update"); $dbt->update_operatorsloop($varenv{dbname},$users_sharee->{c_id},"update");
print redirect("$varenv{wwwhost}/$varenv{mandant}/$varenv{profile}?$returnwww$session_and"); print redirect("$varenv{wwwhost}/$varenv{mandant}/$varenv{profile}?$returnwww$session_and");

View file

@ -14,14 +14,10 @@ use POSIX;
use CGI ':standard'; use CGI ':standard';
use Email::MIME; use Email::MIME;
use IO::All; use IO::All;
use Email::Sender::Simple qw(sendmail);
use Net::SMTP; use Net::SMTP;
use Try::Tiny; use Try::Tiny;
use Config::General; use Config::General;
use Sys::Hostname;
my $hostname = hostname;
use Lib::Config;
use Mod::Basework; use Mod::Basework;
use Mod::DBtank; use Mod::DBtank;
use Data::Dumper; use Data::Dumper;
@ -34,7 +30,6 @@ sub new {
} }
my $q = new CGI; my $q = new CGI;
my $cf = new Config;
my $bw = new Basework; my $bw = new Basework;
my $dbt = new DBtank; my $dbt = new DBtank;
@ -47,117 +42,60 @@ sub send_mail(){
my $sendref = shift; my $sendref = shift;
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
my $mail_from = $sendref->{mail_from} || $mailxconf{mailx_default}->{mail_from}; open(EMA, ">> $dbt->{copri_conf}->{logdir}/mailtransport.log");
my $mail_to = $sendref->{mail_to} || $mailxconf{mailx_default}->{mail_to};
my $subject = $sendref->{subject} || "subject fails"; my $mail_from = $sendref->{mail_from} || $mailxconf{$sendref->{mailxcfg}}->{mail_from};
my $mail_to = $sendref->{mail_to} || $mailxconf{$sendref->{mailxcfg}}->{mail_to};
my $filename = $sendref->{filename} || ""; my $filename = $sendref->{filename} || "";
my $message = $sendref->{message} || "Failure, no message\n";
#If caller use utf8, message is encoded as utf-8
#$message = Encode::encode('utf-8', Encode::decode('iso-8859-1', $message));
#Special tink statisk, readdir with filename print EMA "\n$now_dt, start mailing to: $mail_to | subject: $sendref->{subject}\n";
#$filename like "2018-12"
my @files = ($filename);
#disabled because of zipping my $html = "<html><head><title>$sendref->{subject}</title></head><body style='text-align:left;border:0px solid silver;padding:15px;margin:2%;width:90%;'>\n";
#TODO, check what happens about Statistik-occubike_station_2019-1-konrad.csv $html .= "<div>$sendref->{message}</div>\n";
#Okay, send_mail breaks on verylong Statistik lines. CSV zipping is the solution $html .= "<div>$sendref->{signature}</div>\n" if($sendref->{signature});
#@files = $lb->read_dirfiles("$dbt->{copri_conf}->{basedir}/csv",$filename,"file","") if($filename =~ /\d+-\d+/); $html .= "</body></html>";
if($dbt->{copri_conf}->{stage} eq "test"){
$mail_to = $mailxconf{mailx_default}->{mail_to};
$subject .= " * offline Test *";
}
$bw->log("Trying send_mail:$0",$sendref,""); $bw->log("Trying send_mail:$0",$sendref,"");
if(ref($sendref) eq "HASH"){ if(ref($sendref) eq "HASH"){
$mailxconf{mailx_default}->{sasl_password} = Encode::encode('iso-8859-1', Encode::decode('utf-8', $mailxconf{mailx_default}->{sasl_password})); my $smtp = Net::SMTP->new($mailxconf{$sendref->{mailxcfg}}->{mail_gateway},
my $transport = Email::Sender::Transport::SMTPS->new( Port => 465,
host => "$mailxconf{mailx_default}->{mail_gateway}", Hello => 'sharee.bike',
ssl => 'ssl', Timeout => 30,
port => 465, Debug => 0,
sasl_username => "$mailxconf{mailx_default}->{sasl_username}", SSL => 1,
sasl_password => "$mailxconf{mailx_default}->{sasl_password}",
helo => "$mailxconf{mailx_default}->{mail_from}",
debug => 1,
); );
$smtp->auth($mailxconf{$sendref->{mailxcfg}}->{sasl_username},$mailxconf{$sendref->{mailxcfg}}->{sasl_password});
$smtp->mail($mailxconf{$sendref->{mailxcfg}}->{mail_from});
#multipart message if($dbt->{copri_conf}->{stage} eq "test"){
#Email::MIME !!! $mail_to = $mailxconf{$sendref->{mailxcfg}}->{mail_to};
if(1==1){ $sendref->{subject} .= "* offline Test *";
my @parts = ();
my $parts_1 = (
Email::MIME->create(
attributes => {
content_type => "text/plain",
#disposition => "attachment",
encoding => "quoted-printable",
charset => "UTF-8",
},
body_str => "$sendref->{message}",
),
);
push(@parts,$parts_1);
foreach $filename (@files){
if($filename){
my $parts_0 = (
Email::MIME->create(
attributes => {
filename => "$filename",
#content_type => "application/pdf",
#content_type => "text/csv",
content_type => "application/octet-stream",
disposition => "attachment",
encoding => "quoted-printable",
name => "$filename",
},
body => io( "$dbt->{copri_conf}->{basedir}/csv/$filename" )->binary->all,
),
);
$bw->log("Attachment:$dbt->{copri_conf}->{basedir}/csv/$filename","","");
push(@parts,$parts_0);
}
} }
$message = Email::MIME->create( if ($smtp->to($mail_to)) {
header_str => [ From => "$mail_from", $smtp->data();
To => "$mail_to", $smtp->datasend("To: $mail_to\n");
Subject => "$subject", ], $smtp->datasend("Subject: $sendref->{subject}\nMIME-Version: 1.0\nContent-Type: text/html; charset=UTF-8 \n\n");
parts => [ @parts ], $smtp->datasend($html);
); $smtp->dataend();
#$message->charset_set( 'UTF-8' ); } else {
print $message->as_string; print EMA $smtp->message();
}#if not Email::Mime
else{
$message = Email::Simple->create(
header => [
From => "$mail_from",
To => "$mail_to",
Subject => "$subject",
],
body => "$sendref->{message}",
);
} }
try { sleep 1;
sendmail($message, { transport => $transport }); #return $?;
} catch {
$bw->log("FAILURE send_mail:$0",$sendref,"");
warn "Error sending mail: $_";
};
} }
print EMA "done mailing with state: $?\n";
print EMA "\n\n";
close EMA;
$bw->log("Success send_mail","",""); $bw->log("Success send_mail","","");
}#end mail_send }#end mail_send
1; 1;

View file

@ -139,7 +139,7 @@ my $ctadr = &get_contentadr($c_id,$emailpw) if($c_id =~ /^\d+$/ || $emailpw =~ /
#$varenv{sasl_password} = Encode::encode('iso-8859-1', Encode::decode('utf-8', $varenv{sasl_password})); #$varenv{sasl_password} = Encode::encode('iso-8859-1', Encode::decode('utf-8', $varenv{sasl_password}));
$smtp->auth($mailxconf{mailx_default}->{sasl_username},$mailxconf{mailx}->{sasl_password}); $smtp->auth($mailxconf{mailx_default}->{sasl_username},$mailxconf{mailx_default}->{sasl_password});
$smtp->mail($mailxconf{mailx_default}->{mail_from}); $smtp->mail($mailxconf{mailx_default}->{mail_from});
my $smtp_return = ""; my $smtp_return = "";

View file

@ -1,133 +0,0 @@
#!/usr/bin/perl -w
#2021-03-17
#redisgn because of BEGIN, use Net::SMTP; and executed in src/scripts
#
#sudo su www-data -c "./src/scripts/newsletter_post.pl 'shareedms-primary' 'send_cardexpire'"
#
#TODO, migrate it all to MailTransport.pm
#
#
use vars qw($syshost);
BEGIN {
$syshost = $ARGV[0] || exit 1;
}
use lib "/var/www/copri-bike/$syshost/src";
use strict;
use warnings;
use utf8;
use Encode;
use CGI ':standard';
use DBI;
use POSIX;
use Email::MIME;
use IO::All;
use Email::MIME::CreateHTML;
use Email::Sender::Simple qw(sendmail);
use Net::SMTP;
use Try::Tiny;
use URI::Encode;
my $uri_encode = URI::Encode->new( { encode_reserved => 1 } );
use Data::Dumper;
use Sys::Hostname;
my $hostname = hostname;
use Lib::Config;
my $q = new CGI;
my $cf = new Config;
my %varenv = $cf->envonline("","$syshost");
my $today = strftime("%d.%m.%Y %H:%M:%S",localtime(time));
my $todo = $ARGV[1];
open(EMA, ">> $varenv{logdir}/newsletter_post.log");
print EMA "\n$today, start mailing\n";
print EMA "'$todo\n";
my $smtp_return = "";
if($todo eq "send_cardexpire"){
my ($mail_to,$subject,$body,$signature) = send_cardexpire(\%varenv);
$smtp_return = transport(\%varenv,$mail_to,$subject,$body,$signature);
}
#----------------------------------------------------
sub send_cardexpire {
my $varenv = shift;
my $mail_to = "ragu\@gnu-systems.de";
my $name = "test";
my $subject = "Fahrradmietsystem Konstanz";
my $body = <<EOF
Guten Tag $name,
wir mussten Ihren Fahrradmietsystem Account sperren weil der letzte Mietbetrag nicht eingezogen werden konnte.
Sie können Ihren Account selbst wieder freischalten, indem Sie die Zahlungsdaten erneuern. Dies kann aus Sicherheitsgründen von Seiten Ihrer Bank nötig sein oder es gab einen Fehler in Ihren Eingaben.
Nach der Anmeldung im Fahrradmietsystem Konstanz ( <a href='https://www.stadtwerke-konstanz.de/mobilitaet/rad-mietsystem?konrad_goto=Anmelden'>https://www.stadtwerke-konstanz.de/mobilitaet/rad-mietsystem</a> ) haben Sie die Möglichkeit Ihre Daten zu überprüfen und ggf. zu erneuern.
Kontaktieren Sie uns bitte falls Ihr Account für den Verleih nicht automatisch freigeschaltet wurde.
Für weitere Fragen wenden Sie sich bitte an unsere Buchhaltung unter: buchhaltung\@fahrradspezialitaeten.com oder telefonisch 0761/5158912 (Mo, Mi, Fr 9-12 Uhr)
EOF
;
$body =~ s/\n/\<br \/>/g;
my $signature = "";
return ($mail_to,$subject,$body,$signature);
}
#---------------------------------------------------
#
sub transport {
my $varenv = shift;
my $mail_to = shift;
my $subject = shift;
my $body = shift;
my $signature = shift;
my $html = "<html><head><title>$subject</title></head><body style='text-align:left;border:0px solid silver;padding:15px;margin:2%;width:90%;'>\n";
$html .= "<div>$body</div>\n";
$html .= "<div>$signature</div>\n";
$html .= "</body></html>";
my $smtp = Net::SMTP->new($varenv->{mail_gateway},
Port => 465,
Hello => 'TeilRad',
Timeout => 30,
Debug => 0,
SSL => 1,
);
$smtp->auth($varenv->{sasl_username},$varenv->{sasl_password});
$smtp->mail($varenv->{mail_from});
if($hostname ne "ginger"){
$mail_to = $varenv->{mail_testto};
$subject .= "* offline Test *";
}
if ($smtp->to($mail_to)) {
$smtp->data();
$smtp->datasend("To: $mail_to\n");
$smtp->datasend("Subject: $subject\nMIME-Version: 1.0\nContent-Type: text/html; charset=UTF-8 \n\n");
$smtp->datasend($html);
$smtp->dataend();
print EMA "$?\n";
} else {
print EMA $smtp->message();
}
sleep 1;
return $?;
}
#----------------------------------------------------
print EMA "done mailing: $?\n";
print EMA "\n\n";
close EMA;
1;