]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Mail.pm
move UTF8 routines out of Debbugs::Common and into Debbugs::UTF8 so Debbugs::Config...
[debbugs.git] / Debbugs / Mail.pm
index 41a67802b2632154a2590e2e382245b3baad5346..9fa282b1b53689447621513908d3092d57ebc65b 100644 (file)
@@ -49,6 +49,7 @@ use Debbugs::MIME qw(encode_rfc1522);
 use Debbugs::Config qw(:config);
 use Params::Validate qw(:types validate_with);
 use Encode qw(encode is_utf8);
+use Debbugs::UTF8 qw(encode_utf8_safely);
 
 use Debbugs::Packages;
 
@@ -163,20 +164,19 @@ passed through.
 
 sub default_headers {
     my %param = validate_with(params => \@_,
-                             spec   => {queue_file => {type => SCALAR,
+                             spec   => {queue_file => {type => SCALAR|UNDEF,
                                                        optional => 1,
                                                       },
                                         data       => {type => HASHREF,
                                                        optional => 1,
                                                       },
-                                        msgid      => {type => SCALAR,
+                                        msgid      => {type => SCALAR|UNDEF,
                                                        optional => 1,
                                                       },
-                                        msgtype    => {type => SCALAR,
+                                        msgtype    => {type => SCALAR|UNDEF,
                                                        default => 'misc',
-                                                       optional => 1,
                                                       },
-                                        pr_msg     => {type => SCALAR,
+                                        pr_msg     => {type => SCALAR|UNDEF,
                                                        default => 'misc',
                                                       },
                                         headers    => {type => ARRAYREF,
@@ -186,6 +186,17 @@ sub default_headers {
                             );
     my @header_order = (qw(X-Loop From To subject),
                        qw(Message-ID In-Reply-To References));
+    # handle various things being undefined
+    if (not exists $param{queue_file} or
+       not defined $param{queue_file}) {
+       $param{queue_file} = join('',gettimeofday())
+    }
+    for (qw(msgtype pr_msg)) {
+       if (not exists $param{$_} or
+           not defined $param{$_}) {
+           $param{$_} = 'misc';
+       }
+    }
     my %header_order;
     @header_order{map {lc $_} @header_order} = 0..$#header_order;
     my %set_headers;
@@ -205,7 +216,7 @@ sub default_headers {
 
     # calculate our headers
     my $bug_num = exists $param{data} ? $param{data}{bug_num} : 'x';
-    my $nn = exists $param{queue_file} ? $param{queue_file} : join('',gettimeofday());
+    my $nn = $param{queue_file};
     # handle the user giving the actual queue filename instead of nn
     $nn =~ s/^[a-zA-Z]([a-zA-Z])/$1/;
     $nn = lc($nn);
@@ -347,11 +358,6 @@ sub send_mail_message{
      if ($param{encode_headers}) {
          $param{message} = encode_headers($param{message});
      }
-     eval {
-        if (is_utf8($param{message})) {
-            $param{message} = encode('utf8',$param{message});
-        }
-     };
 
      # First, try to send the message as is.
      eval {
@@ -393,7 +399,7 @@ sub encode_headers{
 
      my ($header,$body) = split /\n\n/, $message, 2;
      $header = encode_rfc1522($header);
-     return $header . qq(\n\n). $body;
+     return $header . qq(\n\n). encode_utf8_safely($body);
 }
 
 =head2 rfc822_date