From 7d36ad4669e790e53f51aef772f6e62a6860f4c0 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Wed, 22 Jun 2011 00:33:44 +0200 Subject: [PATCH] (smtpmail-via-smtp): Check for servers saying they want AUTH after MAIL FROM, too. --- lisp/ChangeLog | 2 ++ lisp/mail/smtpmail.el | 30 ++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8a107db8cb5..21658c8ee27 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -6,6 +6,8 @@ but in particular: (smtpmail-auth-credentials): Removed. (smtpmail-starttls-credentials): Removed. + (smtpmail-via-smtp): Check for servers saying they want AUTH after + MAIL FROM, too. * net/network-stream.el (network-stream-open-starttls): Provide support for client certificates both for external and built-in diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el index a860c1ff25f..a08cd7a3fa5 100644 --- a/lisp/mail/smtpmail.el +++ b/lisp/mail/smtpmail.el @@ -470,7 +470,9 @@ The list is in preference order.") (smtpmail-send-command process string) (unless (smtpmail-ok-p (setq ret (smtpmail-read-response process)) code) - (throw 'done (smtpmail-response-text ret))) + (throw 'done (format "%s in response to %s" + (smtpmail-response-text ret) + string))) ret)) (defun smtpmail-try-auth-methods (process supported-extensions host port @@ -483,7 +485,9 @@ The list is in preference order.") (auth-info (car (auth-source-search :max 1 :host host - :port (or port "smtp") + :port (if port + (format "%s" port) + "smtp") :create ask-for-password))) (user (plist-get auth-info :user)) (password (plist-get auth-info :secret)) @@ -721,9 +725,27 @@ The list is in preference order.") " BODY=8BITMIME" "") ""))) - (smtpmail-command-or-throw + (smtpmail-send-command process (format "MAIL FROM:<%s>%s%s" - envelope-from size-part body-part))) + envelope-from size-part body-part)) + (cond + ((smtpmail-ok-p (setq result (smtpmail-read-response process))) + ;; Success. + ) + ((and auth-mechanisms + (not ask-for-password) + (= (car result) 530)) + ;; We got a "530 auth required", so we close and try + ;; again, this time asking the user for a password. + (smtpmail-send-command process "QUIT") + (smtpmail-read-response process) + (delete-process process) + (throw 'done + (smtpmail-via-smtp recipient smtpmail-text-buffer t))) + (t + ;; Return the error code. + (throw 'done + (smtpmail-response-text result))))) ;; RCPT TO: (let ((n 0)) -- 2.39.2