From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Simon Josefsson Newsgroups: gmane.emacs.bugs Subject: make smtpmail.el use the new netrc.el file Date: Wed, 24 Apr 2002 21:28:03 +0200 Sender: bug-gnu-emacs-admin@gnu.org Message-ID: NNTP-Posting-Host: localhost.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: main.gmane.org 1019676630 30200 127.0.0.1 (24 Apr 2002 19:30:30 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Wed, 24 Apr 2002 19:30:30 +0000 (UTC) Cc: Ted Zlatanov Return-path: Original-Received: from fencepost.gnu.org ([199.232.76.164]) by main.gmane.org with esmtp (Exim 3.33 #1 (Debian)) id 170STF-0007qz-00 for ; Wed, 24 Apr 2002 21:30:30 +0200 Original-Received: from localhost ([127.0.0.1] helo=fencepost.gnu.org) by fencepost.gnu.org with esmtp (Exim 3.34 #1 (Debian)) id 170STH-0006ha-00; Wed, 24 Apr 2002 15:30:31 -0400 Original-Received: from 178.230.13.217.in-addr.dgcsystems.net ([217.13.230.178] helo=yxa.extundo.com) by fencepost.gnu.org with esmtp (Exim 3.34 #1 (Debian)) id 170SRL-0006aM-00 for ; Wed, 24 Apr 2002 15:28:31 -0400 Original-Received: from localhost.localdomain (yxa.extundo.com [217.13.230.178]) (authenticated bits=0) by yxa.extundo.com (8.12.2/8.12.2) with ESMTP id g3OJSOKg003246; Wed, 24 Apr 2002 21:28:26 +0200 Original-To: bug-gnu-emacs@gnu.org Original-Lines: 95 User-Agent: Gnus/5.090006 (Oort Gnus v0.06) Emacs/21.2 (i686-pc-linux-gnu) Errors-To: bug-gnu-emacs-admin@gnu.org X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.0.9 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Bug reports for GNU Emacs, the Swiss army knife of text editors List-Unsubscribe: , List-Archive: Xref: main.gmane.org gmane.emacs.bugs:920 X-Report-Spam: http://spam.gmane.org/gmane.emacs.bugs:920 This patch makes smtpmail.el take advantage of the new netrc.el stuff. I bumped :version on the variable to "21.3". Is this correct? I wasn't sure about that. I am sending this message with SMTP authentication using ~/.authinfo, but I also tested the old `smtpmail-auth-credentials' as well. Not tested by anyone but me though. Ted, if you can/want, please test it. (Ted, netrc.el has been added to Emacs, XEmacs and Oort Gnus now.) 2002-04-24 Simon Josefsson * mail/smtpmail.el (smtpmail-auth-credentials): Support netrc files as well. (smtpmail-try-auth-methods): Support netrc data. (netrc-parse): Autoload netrc. --- smtpmail.el.~1.38.~ Wed Apr 24 21:13:38 2002 +++ smtpmail.el Wed Apr 24 21:26:11 2002 @@ -40,7 +40,7 @@ ;;(setq smtpmail-local-domain "YOUR DOMAIN NAME") ;;(setq smtpmail-sendto-domain "YOUR DOMAIN NAME") ;;(setq smtpmail-debug-info t) ; only to debug problems -;;(setq smtpmail-auth-credentials +;;(setq smtpmail-auth-credentials ; or use ~/.authinfo ;; '(("YOUR SMTP HOST" 25 "username" "password"))) ;;(setq smtpmail-starttls-credentials ;; '(("YOUR SMTP HOST" 25 "~/.my_smtp_tls.key" "~/.my_smtp_tls.cert"))) @@ -73,6 +73,7 @@ (autoload 'message-make-date "message") (autoload 'message-make-message-id "message") (autoload 'rfc2104-hash "rfc2104") +(autoload 'netrc-parse "netrc") ;;; (defgroup smtpmail nil @@ -150,19 +151,21 @@ :type 'directory :group 'smtpmail) -(defcustom smtpmail-auth-credentials '(("" 25 "" nil)) - "Specify username and password for servers. -It is a list of four-element lists that contain, in order, +(defcustom smtpmail-auth-credentials "~/.authinfo" + "Specify username and password for servers, directly or via .netrc file. +This variable can either be a filename pointing to a file in netrc(5) +format, or list of four-element lists that contain, in order, `servername' (a string), `port' (an integer), `user' (a string) and -`password' (a string, or nil to query the user when needed). -If you need to enter a `realm' too, add it to the user string, so that -it looks like `user@realm'." - :type '(repeat (list (string :tag "Server") +`password' (a string, or nil to query the user when needed). If you +need to enter a `realm' too, add it to the user string, so that it +looks like `user@realm'." + :type '(choice file + (repeat (list (string :tag "Server") (integer :tag "Port") (string :tag "Username") (choice (const :tag "Query when needed" nil) - (string :tag "Password")))) - :version "21.1" + (string :tag "Password"))))) + :version "21.3" :group 'smtpmail) (defcustom smtpmail-starttls-credentials '(("" 25 "" "")) @@ -460,7 +467,16 @@ (defun smtpmail-try-auth-methods (process supported-extensions host port) (let* ((mechs (cdr-safe (assoc 'auth supported-extensions))) (mech (car (smtpmail-intersection smtpmail-auth-supported mechs))) - (cred (smtpmail-find-credentials smtpmail-auth-credentials host port)) + (cred (if (stringp smtpmail-auth-credentials) + (let* ((netrc (netrc-parse smtpmail-auth-credentials)) + (hostentry (netrc-machine + netrc host (format "%s" (or port "smtp")) + "smtp"))) + (list host port + (netrc-get hostentry "login") + (netrc-get hostentry "password"))) + (smtpmail-find-credentials + smtpmail-auth-credentials host port))) (passwd (when cred (or (smtpmail-cred-passwd cred) (read-passwd @@ -507,7 +523,8 @@ (t (error "Mechanism %s not implemented" mech))) ;; Remember the password. - (unless (smtpmail-cred-passwd cred) + (when (and (not (stringp smtpmail-auth-credentials)) + (null (smtpmail-cred-passwd cred))) (setcar (cdr (cdr (cdr cred))) passwd))))) (defun smtpmail-via-smtp (recipient smtpmail-text-buffer)