summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LedgerSMB/Mailer.pm22
1 files changed, 14 insertions, 8 deletions
diff --git a/LedgerSMB/Mailer.pm b/LedgerSMB/Mailer.pm
index 80ffebb8..473fa7cb 100644
--- a/LedgerSMB/Mailer.pm
+++ b/LedgerSMB/Mailer.pm
@@ -51,33 +51,37 @@ sub send {
my ($self) = @_;
my $domain = $self->{from};
+ my $boundary = time;
+ $boundary = "LSMB-$boundary";
$domain =~ s/(.*?\@|>)//g;
- my $msgid = "$boundary\@$domain";
+ my $msg_id = "$boundary\@$domain";
$self->{contenttype} = "text/plain" unless $self->{contenttype};
- my %h;
for (qw(from to cc bcc)) {
$self->{$_} =~ s/\&lt;/</g;
$self->{$_} =~ s/\&gt;/>/g;
$self->{$_} =~ s/(\/|\\|\$)//g;
- $h{$_} = $self->{$_};
}
- $h{subject} = "Subject: ".Encode::encode('MIME-Header', $self->{subject});
-
my $msg = MIME::Lite->new(
'From' => $self->{from},
'To' => $self->{to},
'Cc' => $self->{cc},
'Bcc' => $self->{bcc},
- 'Subject' => $self->{subject},
+ 'Subject' => Encode::encode('MIME-Header', $self->{subject}),
'Type' => 'TEXT',
- 'Data' => $self->{message},
+ 'Data' => Encode::encode_utf8($self->{message}),
+ 'Encoding' => '8bit',
+ 'Message-ID' => $msg_id,
);
+ $msg->attr( 'Content-Type' => $self->{contenttype} );
+ $msg->attr( 'Content-Type.charset' => 'UTF-8' ) if
+ $self->{contenttype} =~ m#^text/#;
$msg->add( 'Disposition-Notification-To' => $self->{from} )
if $self->{notify};
$msg->replace( 'X-Mailer' => "LedgerSMB $self->{version}" );
+ $msg->binmode(':utf8');
if ( @{ $self->{attachments} } ) {
foreach my $attachment ( @{ $self->{attachments} } ) {
@@ -86,13 +90,15 @@ sub send {
( $attachment =~ /(^\w+$)|\.(html|text|txt|sql)$/ )
? "text"
: "application";
+ my $type = "$attachment/$self->{format}";
+ $type .= '; charset="UTF-8"' if $attachment eq 'text';
my $filename = $attachment;
# strip path
$filename =~ s/(.*\/|$self->{fileid})//g;
$msg->attach(
- 'Type' => "$application/$self->{format}",
+ 'Type' => $type,
'Path' => $attachment,
'Filename' => $filename,
'Disposition' => 'attachment',