emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master f261226d9be: Allow X-Message-SMTP-Method to include more MTAs


From: Andrew G Cohen
Subject: master f261226d9be: Allow X-Message-SMTP-Method to include more MTAs
Date: Fri, 5 May 2023 21:09:11 -0400 (EDT)

branch: master
commit f261226d9be4630572df322b2c4f48713c9c2fce
Author: Andrew G Cohen <cohen@andy.bu.edu>
Commit: Andrew G Cohen <cohen@andy.bu.edu>

    Allow X-Message-SMTP-Method to include more MTAs
    
    * lisp/gnus/message.el (message-multi-smtp-send-mail): Allow the
    X-Message-SMTP-Method header to override the default mailer with not
    only smtp and sendmail but other MTAs as well.
    * doc/misc/message.texi: Document changes to the usage of
    X-Message-SMTP-Method.
---
 doc/misc/message.texi | 19 ++++++++++---------
 lisp/gnus/message.el  | 38 +++++++++++++++++++++-----------------
 2 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index c3ad8dd6942..8064af53fc6 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -1948,11 +1948,9 @@ requires the @acronym{POP}-before-@acronym{SMTP} 
authentication.
 @cindex X-Message-SMTP-Method
 If you have a complex @acronym{SMTP} setup, and want some messages to
 go via one mail server, and other messages to go through another, you
-can use the @samp{X-Message-SMTP-Method} header.  These are the
-supported values:
-
-@table @samp
-@item smtpmail
+can use the @samp{X-Message-SMTP-Method} header to override the
+default by using the keyword @samp{smtp} followed by the server
+information:
 
 @example
 X-Message-SMTP-Method: smtp smtp.fsf.org 587
@@ -1968,16 +1966,19 @@ This is the same as the above, but uses 
@samp{other-user} as the user
 name when authenticating.  This is handy if you have several
 @acronym{SMTP} accounts on the same server.
 
-@item sendmail
+This header may also be used to specify an alternative MTA by using a
+@samp{mailer} keyword, where @samp{mailer} is the name of an MTA with
+a corresponding @code{message-send-mail-with-'mailer'} function.  For
+example:
 
 @example
 X-Message-SMTP-Method: sendmail
 @end example
 
-This will send the message via the locally installed sendmail/exim/etc
-installation.
+will send the message via the locally installed sendmail program.  The
+recognized values of @samp{mailer} are sendmail, qmail, mh, and
+mailclient.
 
-@end table
 
 @item message-mh-deletable-headers
 @vindex message-mh-deletable-headers
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index b35424a8581..45cc21701b3 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -5009,30 +5009,34 @@ Each line should be no more than 79 characters long."
   "Send the current buffer to `message-send-mail-function'.
 Or, if there's a header that specifies a different method, use
 that instead."
-  (let ((method (message-field-value "X-Message-SMTP-Method")))
+  (let ((method (message-field-value "X-Message-SMTP-Method"))
+        send-function)
     (if (not method)
-       (funcall message-send-mail-function)
+        (funcall message-send-mail-function)
       (message-remove-header "X-Message-SMTP-Method")
       (setq method (split-string method))
+      (setq send-function
+            (symbol-function
+             (intern-soft (format "message-send-mail-with-%s" (car method)))))
       (cond
-       ((equal (car method) "sendmail")
-       (message-send-mail-with-sendmail))
        ((equal (car method) "smtp")
-       (require 'smtpmail)
-       (let* ((smtpmail-store-queue-variables t)
+        (require 'smtpmail)
+        (let* ((smtpmail-store-queue-variables t)
                (smtpmail-smtp-server (nth 1 method))
-              (service (nth 2 method))
-              (port (string-to-number service))
-              ;; If we're talking to the TLS SMTP port, then force a
-              ;; TLS connection.
-              (smtpmail-stream-type (if (= port 465)
-                                        'tls
-                                      smtpmail-stream-type))
-              (smtpmail-smtp-service (if (> port 0) port service))
-              (smtpmail-smtp-user (or (nth 3 method) smtpmail-smtp-user)))
-         (message-smtpmail-send-it)))
+               (service (nth 2 method))
+               (port (string-to-number service))
+               ;; If we're talking to the TLS SMTP port, then force a
+               ;; TLS connection.
+               (smtpmail-stream-type (if (= port 465)
+                                         'tls
+                                       smtpmail-stream-type))
+               (smtpmail-smtp-service (if (> port 0) port service))
+               (smtpmail-smtp-user (or (nth 3 method) smtpmail-smtp-user)))
+          (message-smtpmail-send-it)))
+       (send-function
+        (funcall send-function))
        (t
-       (error "Unknown method %s" method))))))
+        (error "Unknown mail method %s" method))))))
 
 (defun message-send-mail-with-sendmail ()
   "Send off the prepared buffer with sendmail."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]