X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FMailer.pm;h=c4cea35f20181affeed2bd1be867520eb4b84bfa;hb=89c9ff022d3f13e27ba6bda085df15707fcfb0eb;hp=3cf2053648c5902f6bb2eb082f83c608ce382408;hpb=de46c7042907923c9b88af67849dddab9a5101ba;p=kivitendo-erp.git diff --git a/SL/Mailer.pm b/SL/Mailer.pm index 3cf205364..c4cea35f2 100644 --- a/SL/Mailer.pm +++ b/SL/Mailer.pm @@ -31,10 +31,14 @@ package Mailer; use Email::Address; +use Encode; use SL::Common; +use SL::MIME; use SL::Template; +use strict; + my $num_sent = 0; sub new { @@ -100,21 +104,21 @@ sub send { $num_sent++; my $boundary = time() . "-$$-${num_sent}"; $boundary = "LxOffice-$self->{version}-$boundary"; - my $domain = $self->{from}; + my $domain = $self->recode($self->{from}); $domain =~ s/(.*?\@|>)//g; my $msgid = "$boundary\@$domain"; my $form = $main::form; my $myconfig = \%main::myconfig; - my $email = $myconfig->{email}; + my $email = $self->recode($myconfig->{email}); $email =~ s/[^\w\.\-\+=@]//ig; my %temp_form = ( %{ $form }, 'myconfig_email' => $email ); - my $template = PlainTextTemplate->new(undef, \%temp_form, $myconfig); - my $sendmail = $template->parse_block($main::sendmail); + my $template = SL::Template::create(type => 'PlainText', form => \%temp_form); + my $sendmail = $template->parse_block($::lx_office_conf{applications}->{sendmail}); - if (!open(OUT, $sendmail)) { + if (!open(OUT, "|$sendmail")) { $main::lxdebug->leave_sub(); return "$sendmail : $!"; } @@ -124,12 +128,15 @@ sub send { foreach my $item (qw(to cc bcc)) { next unless ($self->{$item}); + $self->{$item} = $self->recode($self->{$item}); $self->{$item} =~ s/\</{$item} =~ s/\$<\$/{$item} =~ s/\>/>/g; $self->{$item} =~ s/\$>\$/>/g; } + $self->{from} = $self->recode($self->{from}); + my $headers = ''; foreach my $item (qw(from to cc bcc)) { next unless ($self->{$item}); @@ -148,7 +155,7 @@ sub send { } } - $headers .= sprintf("Subject: %s\n", $self->mime_quote_text($self->{subject}, 60)); + $headers .= sprintf("Subject: %s\n", $self->mime_quote_text($self->recode($self->{subject}), 60)); print OUT qq|${headers}Message-ID: <$msgid> X-Mailer: Lx-Office $self->{version} @@ -163,7 +170,7 @@ MIME-Version: 1.0 print OUT qq|--${boundary} Content-Type: $self->{contenttype}; charset="$self->{charset}" -$self->{message} +| . $self->recode($self->{message}) . qq| |; } @@ -181,10 +188,10 @@ $self->{message} $filename =~ s/(.*\/|\Q$self->{fileid}\E)//g; } - my $application = - ($attachment =~ /(^\w+$)|\.(html|text|txt|sql)$/) - ? "text" - : "application"; + my $application = ($attachment =~ /(^\w+$)|\.(html|text|txt|sql)$/) ? "text" : "application"; + my $content_type = SL::MIME->mime_type_from_ext($filename); + $content_type = "${application}/$self->{format}" if (!$content_type && $self->{format}); + $content_type ||= 'application/octet-stream'; open(IN, $attachment); if ($?) { @@ -201,7 +208,7 @@ $self->{message} } print OUT qq|--${boundary} -Content-Type: $application/$self->{format}; name="$filename"$attachment_charset +Content-Type: ${content_type}; name="$filename"$attachment_charset Content-Transfer-Encoding: BASE64 Content-Disposition: attachment; filename="$filename"\n\n|; @@ -220,7 +227,7 @@ Content-Disposition: attachment; filename="$filename"\n\n|; } else { print OUT qq|Content-Type: $self->{contenttype}; charset="$self->{charset}" -$self->{message} +| . $self->recode($self->{message}) . qq| |; } @@ -259,5 +266,12 @@ sub encode_base64 ($;$) { return $res; } +sub recode { + my $self = shift; + my $text = shift; + + return $::locale->is_utf8 ? Encode::encode('utf-8-strict', $text) : $text; +} + 1;