X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/297ec9f0dcfb45a3d695506c824f13fd72f7d312..eb8e38d2a0a461b1b954a49ba2aeac81e0e85ec1:/SL/Mailer.pm diff --git a/SL/Mailer.pm b/SL/Mailer.pm index dc3c662f0..0880eecc7 100644 --- a/SL/Mailer.pm +++ b/SL/Mailer.pm @@ -32,6 +32,7 @@ package Mailer; use Email::Address; use Encode; +use File::Slurp; use SL::Common; use SL::MIME; @@ -123,7 +124,7 @@ sub send { $num_sent++; my $boundary = time() . "-$$-${num_sent}"; $boundary = "kivitendo-$self->{version}-$boundary"; - my $domain = $self->recode($self->{from}); + my $domain = $self->{from}; $domain =~ s/(.*?\@|>)//g; my $msgid = "$boundary\@$domain"; @@ -141,15 +142,12 @@ 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 %addresses; my $headers = ''; foreach my $item (qw(from to cc bcc)) { @@ -172,7 +170,7 @@ sub send { } } - $headers .= sprintf("Subject: %s\n", $self->mime_quote_text($self->recode($self->{subject}), 60)); + $headers .= sprintf("Subject: %s\n", $self->mime_quote_text($self->{subject}, 60)); $driver->start_mail(from => $self->{from}, to => [ map { @{ $addresses{$_} } } qw(to cc bcc) ]); @@ -187,7 +185,7 @@ MIME-Version: 1.0 $driver->print(qq|--${boundary} Content-Type: $self->{contenttype}; charset="$self->{charset}" -| . $self->recode($self->{message}) . qq| +$self->{message} |); } @@ -205,17 +203,17 @@ Content-Type: $self->{contenttype}; charset="$self->{charset}" $filename =~ s/(.*\/|\Q$self->{fileid}\E)//g; } + my $attachment_content = eval { read_file($attachment) }; + if (!defined $attachment_content) { + $main::lxdebug->leave_sub(); + return "$attachment : $!"; + } + 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 ($?) { - $main::lxdebug->leave_sub(); - return "$attachment : $!"; - } - # only set charset for attachements of type text. every other type should not have this field # refer to bug 883 for detailed information my $attachment_charset; @@ -228,22 +226,14 @@ Content-Type: ${content_type}; name="$filename"$attachment_charset Content-Transfer-Encoding: BASE64 Content-Disposition: attachment; filename="$filename"\n\n|); - my $msg = ""; - while () { - ; - $msg .= $_; - } - $driver->print(encode_base64($msg)); - - close(IN); - + $driver->print(encode_base64($attachment_content)); } $driver->print(qq|--${boundary}--\n|); } else { $driver->print(qq|Content-Type: $self->{contenttype}; charset="$self->{charset}" -| . $self->recode($self->{message}) . qq| +$self->{message} |); } @@ -282,11 +272,4 @@ 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;