]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Mail.pm
serve_cache is not exported by Debbugs::Libravatar
[debbugs.git] / Debbugs / Mail.pm
index 054b04c2bbb22ab3c92ebef1e8a3d88303e0c7f4..9fa282b1b53689447621513908d3092d57ebc65b 100644 (file)
@@ -43,11 +43,13 @@ use base qw(Exporter);
 
 use IPC::Open3;
 use POSIX qw(:sys_wait_h strftime);
-use Time::HiRes qw(usleep);
+use Time::HiRes qw(usleep gettimeofday);
 use Mail::Address ();
 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;
 
@@ -162,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,
@@ -185,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;
@@ -250,7 +262,7 @@ sub default_headers {
                ($header,$default_header{$header});
        }
        else {
-           push @other_headers,($header,$header_order{lc($header)});
+           push @other_headers,($header,$default_header{$header});
        }
     }
     my @headers;
@@ -310,7 +322,7 @@ using warn.
 sub send_mail_message{
      my %param = validate_with(params => \@_,
                               spec  => {sendmail_arguments => {type => ARRAYREF,
-                                                               default => [qw(-odq -oem -oi)],
+                                                               default => $config{sendmail_arguments},
                                                               },
                                         parse_for_recipients => {type => BOOLEAN,
                                                                  default => 0,
@@ -328,7 +340,7 @@ sub send_mail_message{
                                                                 },
                                        },
                              );
-     my @sendmail_arguments = qw(-odq -oem -oi);
+     my @sendmail_arguments = @{$param{sendmail_arguments}};
      push @sendmail_arguments, '-f', $param{envelope_from} if exists $param{envelope_from};
 
      my @recipients;
@@ -387,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