]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 302418: re-enable sendmail support for Windows - Patch by byron jones (glob)...
authorlpsolit%gmail.com <>
Sat, 13 Aug 2005 21:56:19 +0000 (21:56 +0000)
committerlpsolit%gmail.com <>
Sat, 13 Aug 2005 21:56:19 +0000 (21:56 +0000)
Bugzilla/BugMail.pm
Bugzilla/Constants.pm
checksetup.pl
defparams.pl

index e51f0c83bcdc0fd8eb98cf47e6abef3b7362f5f3..260cb055457b5e7746656a58564a4827fcb2cf63 100644 (file)
@@ -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";
index 95b8af98c9025df1dd6fd55bc640991346df8751..2ebb7f10cb108205d4ef542bb3d765153d08785f 100644 (file)
@@ -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;
index 8364a54a80936b3f7860d0977065d6797cd63842..6069de0c931a623e66cd429e02091bf77b1024fa 100755 (executable)
@@ -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'} 
index d8a7b7e3838400bc022968a30a62837d69a0a4e4..598d0711f33463be166e6afcbace9f5ad26d444c 100644 (file)
@@ -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
   },
 
   {