diff options
-rw-r--r-- | Bugzilla/BugMail.pm | 8 | ||||
-rw-r--r-- | Bugzilla/Constants.pm | 5 | ||||
-rwxr-xr-x | checksetup.pl | 9 | ||||
-rw-r--r-- | defparams.pl | 20 |
4 files changed, 36 insertions, 6 deletions
diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm index e51f0c83b..260cb0554 100644 --- a/Bugzilla/BugMail.pm +++ b/Bugzilla/BugMail.pm @@ -615,6 +615,14 @@ sub MessageToMTA { my ($msg) = (@_); return if (Param('mail_delivery_method') eq "none"); + if (Param("mail_delivery_method") eq "sendmail" && $^O =~ /MSWin32/i) { + open(SENDMAIL, '|' . SENDMAIL_EXE . ' -t -i') || + die "Failed to execute " . SENDMAIL_EXE . ": $!\n"; + print SENDMAIL $msg; + close SENDMAIL; + return; + } + my @args; if (Param("mail_delivery_method") eq "sendmail" && !Param("sendmailnow")) { push @args, "-ODeliveryMode=deferred"; diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 95b8af98c..2ebb7f10c 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -89,6 +89,8 @@ use base qw(Exporter); FULLTEXT_BUGLIST_LIMIT ADMIN_GROUP_NAME + + SENDMAIL_EXE ); @Bugzilla::Constants::EXPORT_OK = qw(contenttypes); @@ -238,4 +240,7 @@ use constant FULLTEXT_BUGLIST_LIMIT => 200; # Default administration group name. use constant ADMIN_GROUP_NAME => 'admin'; +# Path to sendmail.exe (Windows only) +use constant SENDMAIL_EXE => '/usr/lib/sendmail.exe'; + 1; diff --git a/checksetup.pl b/checksetup.pl index 8364a54a8..6069de0c9 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -1182,9 +1182,12 @@ if (@oldparams) { } # Set mail_delivery_method to SMTP and prompt for SMTP server -# if running on Windows and set to sendmail (Mail::Mailer doesn't -# support sendmail on Windows) -if ($^O =~ /MSWin32/i && Param('mail_delivery_method') eq 'sendmail') { +# if running on Windows and no third party sendmail wrapper +# is available +if ($^O =~ /MSWin32/i + && Param('mail_delivery_method') eq 'sendmail' + && !-e SENDMAIL_EXE) +{ print "\nBugzilla requires an SMTP server to function on Windows.\n" . "Please enter your SMTP server's hostname: "; my $smtp = $answer{'SMTP_SERVER'} diff --git a/defparams.pl b/defparams.pl index d8a7b7e38..598d0711f 100644 --- a/defparams.pl +++ b/defparams.pl @@ -54,6 +54,7 @@ use Socket; use Bugzilla::Config qw(:DEFAULT $templatedir $webdotdir); use Bugzilla::Util; +use Bugzilla::Constants; # Checking functions for the various values # Some generic checking functions are included in Bugzilla::Config @@ -247,6 +248,18 @@ sub find_languages { return join(', ', @languages); } +sub check_mail_delivery_method { + my $check = check_multi(@_); + return $check if $check; + my $mailer = shift; + if ($mailer eq 'sendmail' && $^O =~ /MSWin32/i) { + # look for sendmail.exe + return "Failed to locate " . SENDMAIL_EXE + unless -e SENDMAIL_EXE; + } + return ""; +} + # OK, here are the parameter definitions themselves. # # Each definition is a hash with keys: @@ -694,7 +707,8 @@ sub find_languages { name => 'mail_delivery_method', desc => 'Defines how email is sent, or if it is sent at all.<br><ul>' . '<li>\'sendmail\', \'smtp\' and \'qmail\' are all MTAs. ' . - '(only SMTP is available in Windows.)</li>' . + 'You need to install a third-party sendmail replacement if ' . + 'you want to use sendmail on Windows.' . '<li>\'testfile\' is useful for debugging: all email is stored ' . 'in data/mailer.testfile instead of being sent. For more ' . 'information, see the Mail::Mailer manual.</li>' . @@ -703,10 +717,10 @@ sub find_languages { 'stored.</li></ul>' , type => 's', choices => $^O =~ /MSWin32/i - ? ['smtp', 'testfile', 'none'] + ? ['smtp', 'testfile', 'sendmail', 'none'] : ['sendmail', 'smtp', 'qmail', 'testfile', 'none'], default => 'sendmail', - checker => \&check_multi + checker => \&check_mail_delivery_method }, { |