Skip to content

Commit

Permalink
Bug 502625: Replace Email::Send with Email::Sender
Browse files Browse the repository at this point in the history
r=dylan a=glob
  • Loading branch information
LpSolit committed Sep 20, 2014
1 parent 917ede9 commit 5d96fa7
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 73 deletions.
23 changes: 13 additions & 10 deletions Bugzilla/Config.pm
Original file line number Diff line number Diff line change
Expand Up @@ -185,16 +185,19 @@ sub update_params {
}

# Old mail_delivery_method choices contained no uppercase characters
if (exists $param->{'mail_delivery_method'}
&& $param->{'mail_delivery_method'} !~ /[A-Z]/) {
my $method = $param->{'mail_delivery_method'};
my %translation = (
'sendmail' => 'Sendmail',
'smtp' => 'SMTP',
'qmail' => 'Qmail',
'testfile' => 'Test',
'none' => 'None');
$param->{'mail_delivery_method'} = $translation{$method};
my $mta = $param->{'mail_delivery_method'};
if ($mta) {
if ($mta !~ /[A-Z]/) {
my %translation = (
'sendmail' => 'Sendmail',
'smtp' => 'SMTP',
'qmail' => 'Qmail',
'testfile' => 'Test',
'none' => 'None');
$param->{'mail_delivery_method'} = $translation{$mta};
}
# This will force the parameter to be reset to its default value.
delete $param->{'mail_delivery_method'} if $param->{'mail_delivery_method'} eq 'Qmail';
}

# Convert the old "ssl" parameter to the new "ssl_redirect" parameter.
Expand Down
11 changes: 1 addition & 10 deletions Bugzilla/Config/MTA.pm
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,6 @@ use strict;
use warnings;

use Bugzilla::Config::Common;
# Return::Value 1.666002 pollutes the error log with warnings about this
# deprecated module. We have to set NO_CLUCK = 1 before loading Email::Send
# to disable these warnings.
BEGIN {
$Return::Value::NO_CLUCK = 1;
}
use Email::Send;

our $sortkey = 1200;

Expand All @@ -28,9 +21,7 @@ sub get_param_list {
{
name => 'mail_delivery_method',
type => 's',
# Bugzilla is not ready yet to send mails to newsgroups, and 'IO'
# is of no use for now as we already have our own 'Test' mode.
choices => [grep {$_ ne 'NNTP' && $_ ne 'IO'} Email::Send->new()->all_mailers(), 'None'],
choices => ['Sendmail', 'SMTP', 'Test', 'None'],
default => 'Sendmail',
checker => \&check_mail_delivery_method
},
Expand Down
3 changes: 0 additions & 3 deletions Bugzilla/Hook.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1033,9 +1033,6 @@ Params:
=item C<email> - The C<Email::MIME> object that's about to be sent.
=item C<mailer_args> - An arrayref that's passed as C<mailer_args> to
L<Email::Send/new>.
=back
=head2 object_before_create
Expand Down
16 changes: 4 additions & 12 deletions Bugzilla/Install/Requirements.pm
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,6 @@ use Bugzilla::Install::Util qw(install_string bin_loc
use List::Util qw(max);
use Term::ANSIColor;

# Return::Value 1.666002 pollutes the error log with warnings about this
# deprecated module. We have to set NO_CLUCK = 1 before loading Email::Send
# in have_vers() to disable these warnings.
BEGIN {
$Return::Value::NO_CLUCK = 1;
}

use parent qw(Exporter);
our @EXPORT = qw(
REQUIRED_MODULES
Expand Down Expand Up @@ -131,12 +124,11 @@ sub REQUIRED_MODULES {
module => 'Template',
version => '2.24'
},
# 2.04 implement the "Test" method (to write to data/mailer.testfile).
# 1.300011 has a debug mode for SMTP and automatically pass -i to sendmail.
{
package => 'Email-Send',
module => 'Email::Send',
version => ON_WINDOWS ? '2.16' : '2.04',
blacklist => ['^2\.196$']
package => 'Email-Sender',
module => 'Email::Sender',
version => '1.300011',
},
{
package => 'Email-MIME',
Expand Down
57 changes: 21 additions & 36 deletions Bugzilla/Mailer.pm
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,10 @@ use Date::Format qw(time2str);

use Encode qw(encode);
use Encode::MIME::Header;
use Email::Address;
use Email::MIME;
# Return::Value 1.666002 pollutes the error log with warnings about this
# deprecated module. We have to set NO_CLUCK = 1 before loading Email::Send
# to disable these warnings.
BEGIN {
$Return::Value::NO_CLUCK = 1;
}
use Email::Send;
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP;
use Email::Sender::Transport::Sendmail;

sub MessageToMTA {
my ($msg, $send_now) = (@_);
Expand All @@ -55,8 +50,6 @@ sub MessageToMTA {
# Email::MIME doesn't do this for us. We use \015 (CR) and \012 (LF)
# directly because Perl translates "\n" depending on what platform
# you're running on. See http://perldoc.perl.org/perlport.html#Newlines
# We check for multiple CRs because of this Template-Toolkit bug:
# https://rt.cpan.org/Ticket/Display.html?id=43345
$msg =~ s/(?:\015+)?\012/\015\012/msg;
$email = new Email::MIME($msg);
}
Expand Down Expand Up @@ -108,21 +101,14 @@ sub MessageToMTA {

my $from = $email->header('From');

my ($hostname, @args);
my $mailer_class = $method;
my $hostname;
my $transport;
if ($method eq "Sendmail") {
$mailer_class = 'Bugzilla::Send::Sendmail';
if (ON_WINDOWS) {
$Email::Send::Sendmail::SENDMAIL = SENDMAIL_EXE;
$transport = Email::Sender::Transport::Sendmail->new({ sendmail => SENDMAIL_EXE });
}
push @args, "-i";
# We want to make sure that we pass *only* an email address.
if ($from) {
my ($email_obj) = Email::Address->parse($from);
if ($email_obj) {
my $from_email = $email_obj->address;
push(@args, "-f$from_email") if $from_email;
}
else {
$transport = Email::Sender::Transport::Sendmail->new();
}
}
else {
Expand All @@ -141,16 +127,16 @@ sub MessageToMTA {
}

if ($method eq "SMTP") {
push @args, Host => Bugzilla->params->{"smtpserver"},
username => Bugzilla->params->{"smtp_username"},
password => Bugzilla->params->{"smtp_password"},
Hello => $hostname,
ssl => Bugzilla->params->{'smtp_ssl'},
Debug => Bugzilla->params->{'smtp_debug'};
$transport = Email::Sender::Transport::SMTP->new({
host => Bugzilla->params->{'smtpserver'},
sasl_username => Bugzilla->params->{'smtp_username'},
sasl_password => Bugzilla->params->{'smtp_password'},
helo => $hostname,
ssl => Bugzilla->params->{'smtp_ssl'},
debug => Bugzilla->params->{'smtp_debug'} });
}

Bugzilla::Hook::process('mailer_before_send',
{ email => $email, mailer_args => \@args });
Bugzilla::Hook::process('mailer_before_send', { email => $email });

return if $email->header('to') eq '';

Expand Down Expand Up @@ -185,13 +171,12 @@ sub MessageToMTA {
close TESTFILE;
}
else {
# This is useful for both Sendmail and Qmail, so we put it out here.
# This is useful for Sendmail, so we put it out here.
local $ENV{PATH} = SENDMAIL_PATH;
my $mailer = Email::Send->new({ mailer => $mailer_class,
mailer_args => \@args });
my $retval = $mailer->send($email);
ThrowCodeError('mail_send_error', { msg => $retval, mail => $email })
if !$retval;
eval { sendmail($email, { transport => $transport }) };
if ($@) {
ThrowCodeError('mail_send_error', { msg => $@->message, mail => $email });
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions template/en/default/admin/params/mta.html.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
mail_delivery_method => "Defines how email is sent, or if it is sent at all.<br>
<ul>
<li>
'Sendmail', 'SMTP' and 'Qmail' are all MTAs.
'Sendmail' and 'SMTP' are both MTAs.
You need to install a third-party sendmail replacement if
you want to use sendmail on Windows.
</li>
Expand All @@ -23,7 +23,7 @@
in 'data/mailer.testfile' instead of being sent.
</li>
<li>
'none' will completely disable email. Bugzilla continues
'None' will completely disable email. Bugzilla continues
to act as though it is sending mail, but nothing is sent or
stored.
</li>
Expand Down

0 comments on commit 5d96fa7

Please sign in to comment.