]> 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 22:04:29 +0000 (22:04 +0000)
committerlpsolit%gmail.com <>
Sat, 13 Aug 2005 22:04:29 +0000 (22:04 +0000)
Bugzilla/BugMail.pm
Bugzilla/Constants.pm
checksetup.pl
defparams.pl

index b6c5badfad0630868de79f87d7810bbaeb4e47df..c0fc7d882953ba1212bfdf2faafb921b8fdb1320 100644 (file)
@@ -620,6 +620,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 a626294206bdcd98ea82ed5fcdfe8bbd9c3144ff..ce4801b9328b346d2bf6c8d83da245fd13fd10eb 100644 (file)
@@ -87,6 +87,8 @@ use base qw(Exporter);
     EVT_FLAG_REQUESTED EVT_REQUESTED_FLAG
 
     FULLTEXT_BUGLIST_LIMIT
+
+    SENDMAIL_EXE
 );
 
 @Bugzilla::Constants::EXPORT_OK = qw(contenttypes);
@@ -233,4 +235,7 @@ use constant GLOBAL_EVENTS => EVT_FLAG_REQUESTED, EVT_REQUESTED_FLAG;
 #  a fulltext search.
 use constant FULLTEXT_BUGLIST_LIMIT => 200;
 
+# Path to sendmail.exe (Windows only)
+use constant SENDMAIL_EXE => '/usr/lib/sendmail.exe';
+
 1;
index 172dceaa8ce8c3253b0f3a6f95096c2685644a91..be6bbce498f06328222971b5c7ea64f3f5284d37 100755 (executable)
@@ -1159,9 +1159,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 5b26ef4f93136a494ac52715fc978cef767db834..c8900e72272df6adf4a8d0729b1cf783f235ca31 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
@@ -238,6 +239,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:
@@ -674,7 +687,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>' .
@@ -683,10 +697,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
   },
 
   {