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
$bw->log("user_miniquery via $varenv{dbname} exist count:",$authraw->{int23},"");
#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
$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
#if(length($coo) > 20 && !$q->cookie(-name=>'domcookie')){
($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");
exit 0;
}else{
@ -456,7 +456,7 @@ sub handler {
$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");
print redirect("$varenv{wwwhost}/$varenv{mandant}/$varenv{profile}?$returnwww$session_and");

View file

@ -14,14 +14,10 @@ use POSIX;
use CGI ':standard';
use Email::MIME;
use IO::All;
use Email::Sender::Simple qw(sendmail);
use Net::SMTP;
use Try::Tiny;
use Config::General;
use Sys::Hostname;
my $hostname = hostname;
use Lib::Config;
use Mod::Basework;
use Mod::DBtank;
use Data::Dumper;
@ -34,7 +30,6 @@ sub new {
}
my $q = new CGI;
my $cf = new Config;
my $bw = new Basework;
my $dbt = new DBtank;
@ -47,117 +42,60 @@ sub send_mail(){
my $sendref = shift;
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
my $mail_from = $sendref->{mail_from} || $mailxconf{mailx_default}->{mail_from};
my $mail_to = $sendref->{mail_to} || $mailxconf{mailx_default}->{mail_to};
my $subject = $sendref->{subject} || "subject fails";
open(EMA, ">> $dbt->{copri_conf}->{logdir}/mailtransport.log");
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 $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
#$filename like "2018-12"
my @files = ($filename);
print EMA "\n$now_dt, start mailing to: $mail_to | subject: $sendref->{subject}\n";
#disabled because of zipping
#TODO, check what happens about Statistik-occubike_station_2019-1-konrad.csv
#Okay, send_mail breaks on verylong Statistik lines. CSV zipping is the solution
#@files = $lb->read_dirfiles("$dbt->{copri_conf}->{basedir}/csv",$filename,"file","") if($filename =~ /\d+-\d+/);
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";
$html .= "<div>$sendref->{message}</div>\n";
$html .= "<div>$sendref->{signature}</div>\n" if($sendref->{signature});
$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,"");
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 $transport = Email::Sender::Transport::SMTPS->new(
host => "$mailxconf{mailx_default}->{mail_gateway}",
ssl => 'ssl',
port => 465,
sasl_username => "$mailxconf{mailx_default}->{sasl_username}",
sasl_password => "$mailxconf{mailx_default}->{sasl_password}",
helo => "$mailxconf{mailx_default}->{mail_from}",
debug => 1,
);
my $smtp = Net::SMTP->new($mailxconf{$sendref->{mailxcfg}}->{mail_gateway},
Port => 465,
Hello => 'sharee.bike',
Timeout => 30,
Debug => 0,
SSL => 1,
);
$smtp->auth($mailxconf{$sendref->{mailxcfg}}->{sasl_username},$mailxconf{$sendref->{mailxcfg}}->{sasl_password});
$smtp->mail($mailxconf{$sendref->{mailxcfg}}->{mail_from});
if($dbt->{copri_conf}->{stage} eq "test"){
$mail_to = $mailxconf{$sendref->{mailxcfg}}->{mail_to};
$sendref->{subject} .= "* offline Test *";
}
#multipart message
#Email::MIME !!!
if(1==1){
my @parts = ();
if ($smtp->to($mail_to)) {
$smtp->data();
$smtp->datasend("To: $mail_to\n");
$smtp->datasend("Subject: $sendref->{subject}\nMIME-Version: 1.0\nContent-Type: text/html; charset=UTF-8 \n\n");
$smtp->datasend($html);
$smtp->dataend();
} else {
print EMA $smtp->message();
}
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(
header_str => [ From => "$mail_from",
To => "$mail_to",
Subject => "$subject", ],
parts => [ @parts ],
);
#$message->charset_set( 'UTF-8' );
print $message->as_string;
}#if not Email::Mime
else{
$message = Email::Simple->create(
header => [
From => "$mail_from",
To => "$mail_to",
Subject => "$subject",
],
body => "$sendref->{message}",
);
}
try {
sendmail($message, { transport => $transport });
} catch {
$bw->log("FAILURE send_mail:$0",$sendref,"");
warn "Error sending mail: $_";
};
sleep 1;
#return $?;
}
print EMA "done mailing with state: $?\n";
print EMA "\n\n";
close EMA;
$bw->log("Success send_mail","","");
}#end mail_send
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}));
$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});
my $smtp_return = "";