GNU bug report logs - #18278
[PATCH] bug#18130: rmail.el: handle imaps, pops, and local source mailboxes (maildir, MH, etc.)

Previous Next

Package: emacs;

Reported by: Sergey Poznyakoff <gray <at> gnu.org>

Date: Sat, 16 Aug 2014 17:40:01 UTC

Severity: normal

Tags: confirmed, patch

Merged with 18130, 26376

Found in version 25.2

Fixed in version 26.1

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 18278 in the body.
You can then email your comments to 18278 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#18278; Package emacs. (Sat, 16 Aug 2014 17:40:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Sergey Poznyakoff <gray <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 16 Aug 2014 17:40:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Sergey Poznyakoff <gray <at> gnu.org>
To: <bug-gnu-emacs <at> gnu.org>
Cc: Carlos Pita <carlosjosepita <at> gmail.com>, bug-mailutils <at> gnu.org
Subject: [PATCH] bug#18130: rmail.el: handle imaps, pops,
 and local source mailboxes (maildir, MH, etc.)
Date: Sat, 16 Aug 2014 15:53:24 +0300
Hello,

When used with GNU Mailutils movemail, rmail handles only imap and pop
mailboxes[1].  However, the Mailutils movemail supports a much wider
set of mailbox formats (both remote and local).  This patch makes
rmail.el fully use the flexibility of GNU Mailutils.  In particular,
it makes it possible to use imaps and pops encrypted protocols.  The
patch is against the current Emacs trunk.  The bug has been reported by
Carlos Pita to both GNU Emacs[2] and Mailutuls[3].

[1] http://lists.gnu.org/archive/html/bug-mailutils/2014-07/msg00008.html.
[2] http://lists.gnu.org/archive/html/bug-gnu-emacs/2014-07/msg00867.html
    http://lists.gnu.org/archive/html/bug-gnu-emacs/2014-07/msg00869.html
[3] http://lists.gnu.org/archive/html/bug-mailutils/2014-08/msg00000.html.

* lisp/mail/rmail.el (rmail-remote-proto-p): New function.
(rmail-parse-url): Return actual proto in the 2nd list element
instead of the mere t. All callers updated. Do not require
password unless the argument refers to a remote mailbox.
(rmail-insert-inbox-text): Select a proper message depending
on whether source mailbox is a remote one or not.
Hanlde non-plainfile local source mailboxes (maildir, MH, etc.)
---
 lisp/mail/rmail.el | 58 +++++++++++++++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index f769204..a3d6343 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -1869,13 +1869,16 @@ not be a new one).  It returns non-nil if it got any new messages."
 	(setq result (> new-messages 0))
 	result))))
 
+(defun rmail-remote-proto-p (proto)
+  (string-match "^\\(\\(imap\\|pop\\)s?\\)$" proto))
+
 (defun rmail-parse-url (file)
-  "Parse the supplied URL. Return (list MAILBOX-NAME REMOTE PASSWORD GOT-PASSWORD)
+  "Parse the supplied URL. Return (list MAILBOX-NAME PROTO PASSWORD GOT-PASSWORD)
 WHERE MAILBOX-NAME is the name of the mailbox suitable as argument to the
-actual version of `movemail', REMOTE is non-nil if MAILBOX-NAME refers to
-a remote mailbox, PASSWORD is the password if it should be
-supplied as a separate argument to `movemail' or nil otherwise, GOT-PASSWORD
-is non-nil if the user has supplied the password interactively.
+actual version of `movemail', PROTO is the protocol (use rmail-remote-proto-p
+to see if it refers to a remote mailbox), PASSWORD is the password if it
+should be supplied as a separate argument to `movemail' or nil otherwise,
+GOT-PASSWORD is non-nil if the user has supplied the password interactively.
 "
   (cond
    ((string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file)
@@ -1886,24 +1889,26 @@ is non-nil if the user has supplied the password interactively.
 	    (host  (substring file (or (match-end 2)
 				       (+ 3 (match-end 1))))))
 
-	(if (not pass)
-	    (when rmail-remote-password-required
-	      (setq got-password (not (rmail-have-password)))
-	      (setq supplied-password (rmail-get-remote-password
-				       (string-equal proto "imap"))))
-	  ;; The password is embedded.  Strip it out since movemail
-	  ;; does not really like it, in spite of the movemail spec.
-	  (setq file (concat proto "://" user "@" host)))
+	(if (rmail-remote-proto-p proto)
+	    (if (not pass)	
+		(when rmail-remote-password-required
+		  (setq got-password (not (rmail-have-password)))
+		  (setq supplied-password (rmail-get-remote-password
+					   (string-match "imaps?" proto))))
+	      ;; FIXME
+	      ;; The password is embedded.  Strip it out since movemail
+	      ;; does not really like it, in spite of the movemail spec.
+	      (setq file (concat proto "://" user "@" host))))
 
 	(if (rmail-movemail-variant-p 'emacs)
 	    (if (string-equal proto "pop")
 		(list (concat "po:" user ":" host)
-		      t
+		      proto
 		      (or pass supplied-password)
 		      got-password)
 	      (error "Emacs movemail does not support %s protocol" proto))
 	  (list file
-		(or (string-equal proto "pop") (string-equal proto "imap"))
+		proto
 		(or supplied-password pass)
 		got-password))))
 
@@ -1971,18 +1976,18 @@ Value is the size of the newly read mail after conversion."
   (or (memq (file-locked-p buffer-file-name) '(nil t))
       (error "RMAIL file %s is locked"
 	     (file-name-nondirectory buffer-file-name)))
-  (let (file tofile delete-files movemail popmail got-password password)
+  (let (file tofile delete-files movemail proto got-password password)
     (while files
       ;; Handle remote mailbox names specially; don't expand as filenames
       ;; in case the userid contains a directory separator.
       (setq file (car files))
       (let ((url-data (rmail-parse-url file)))
 	(setq file (nth 0 url-data))
-	(setq popmail (nth 1 url-data))
+	(setq proto (nth 1 url-data))
 	(setq password (nth 2 url-data))
 	(setq got-password (nth 3 url-data)))
 
-      (if popmail
+      (if proto
 	  (setq renamep t)
 	(setq file (file-truename
 		    (substitute-in-file-name (expand-file-name file)))))
@@ -2003,14 +2008,16 @@ Value is the size of the newly read mail after conversion."
 		     (expand-file-name buffer-file-name))))
       ;; Always use movemail to rename the file,
       ;; since there can be mailboxes in various directories.
-      (when (not popmail)
+      (when (not proto)
 	;; On some systems, /usr/spool/mail/foo is a directory
 	;; and the actual inbox is /usr/spool/mail/foo/foo.
 	(if (file-directory-p file)
 	    (setq file (expand-file-name (user-login-name)
 					 file))))
-      (cond (popmail
-	     (message "Getting mail from the remote server ..."))
+      (cond (proto
+	     (message (if (rmail-remote-proto-p proto)
+			  "Getting mail from the remote server ..."
+			(concat "Getting mail from " proto))))
 	    ((and (file-exists-p tofile)
 		  (/= 0 (nth 7 (file-attributes tofile))))
 	     (message "Getting mail from %s..." tofile))
@@ -2021,7 +2028,7 @@ Value is the size of the newly read mail after conversion."
       ;; rename or copy the file FILE to TOFILE if and as appropriate.
       (cond ((not renamep)
 	     (setq tofile file))
-	    ((or (file-exists-p tofile) (and (not popmail)
+	    ((or (file-exists-p tofile) (and (not proto)
 					     (not (file-exists-p file))))
 	     nil)
 	    (t
@@ -2056,9 +2063,10 @@ Value is the size of the newly read mail after conversion."
 		   ;; If we just read the password, most likely it is
 		   ;; wrong.  Otherwise, see if there is a specific
 		   ;; reason to think that the problem is a wrong passwd.
-		   (if (or got-password
-			   (re-search-forward rmail-remote-password-error
-					      nil t))
+		   (if (and (rmail-remote-proto-p proto)
+			    (or got-password
+				(re-search-forward rmail-remote-password-error
+						   nil t)))
 		       (rmail-set-remote-password nil))
 
 		   ;; If using Mailutils, remove initial error code
-- 
1.7.12.1





Merged 18130 18278. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Sat, 16 Aug 2014 17:47:03 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#18278; Package emacs. (Mon, 08 Sep 2014 13:01:01 GMT) Full text and rfc822 format available.

Message #10 received at 18278 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> IRO.UMontreal.CA>
To: Sergey Poznyakoff <gray <at> gnu.org>
Cc: Carlos Pita <carlosjosepita <at> gmail.com>, bug-mailutils <at> gnu.org,
 18278 <at> debbugs.gnu.org
Subject: Re: bug#18278: [PATCH] bug#18130: rmail.el: handle imaps, pops,
 and local source mailboxes (maildir, MH, etc.)
Date: Mon, 08 Sep 2014 09:00:22 -0400
[ Thanks Carlos for pinging us about it.  ]

> set of mailbox formats (both remote and local).  This patch makes
> rmail.el fully use the flexibility of GNU Mailutils.  In particular,
> it makes it possible to use imaps and pops encrypted protocols.  The
> patch is against the current Emacs trunk.  The bug has been reported by
> Carlos Pita to both GNU Emacs[2] and Mailutuls[3].

Thank you Sergey,

The patch looks OK for me, but as I'm not familiar with Rmail, I'd like
to have the opinion of someone else.


        Stefan




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#18278; Package emacs. (Tue, 09 Sep 2014 13:20:03 GMT) Full text and rfc822 format available.

Message #13 received at 18278 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Monnier <monnier <at> IRO.UMontreal.CA>
Cc: gray <at> gnu.org, carlosjosepita <at> gmail.com, bug-mailutils <at> gnu.org,
 18278 <at> debbugs.gnu.org
Subject: Re: bug#18278: [PATCH] bug#18130: rmail.el: handle imaps, pops,
 and local source mailboxes (maildir, MH, etc.)
Date: Tue, 09 Sep 2014 16:19:40 +0300
> From: Stefan Monnier <monnier <at> IRO.UMontreal.CA>
> Date: Mon, 08 Sep 2014 09:00:22 -0400
> Cc: Carlos Pita <carlosjosepita <at> gmail.com>, bug-mailutils <at> gnu.org,
> 	18278 <at> debbugs.gnu.org
> 
> [ Thanks Carlos for pinging us about it.  ]
> 
> > set of mailbox formats (both remote and local).  This patch makes
> > rmail.el fully use the flexibility of GNU Mailutils.  In particular,
> > it makes it possible to use imaps and pops encrypted protocols.  The
> > patch is against the current Emacs trunk.  The bug has been reported by
> > Carlos Pita to both GNU Emacs[2] and Mailutuls[3].
> 
> Thank you Sergey,
> 
> The patch looks OK for me, but as I'm not familiar with Rmail, I'd like
> to have the opinion of someone else.

I do use Rmail, but not movemail from Mailutils, and not for imap and
other modern protocols.

So the only issue that bothers me here is: would the new code still
work with the old movemail, and how does the code detect whether it
invokes old or new one?

If this change is 100% backwards compatible, I see no reasons not to
install it.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#18278; Package emacs. (Tue, 09 Sep 2014 15:31:01 GMT) Full text and rfc822 format available.

Message #16 received at 18278 <at> debbugs.gnu.org (full text, mbox):

From: Carlos Pita <carlosjosepita <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: gray <at> gnu.org, bug-mailutils <at> gnu.org,
 Stefan Monnier <monnier <at> IRO.UMontreal.CA>, 18278 <at> debbugs.gnu.org
Subject: Re: bug#18278: [PATCH] bug#18130: rmail.el: handle imaps, pops,
 and local source mailboxes (maildir, MH, etc.)
Date: Tue, 09 Sep 2014 12:46:08 -0300
Hi Eli,

> So the only issue that bothers me here is: would the new code still
> work with the old movemail, and how does the code detect whether it
> invokes old or new one?

please take into account that this is mainly a bug fix (see bug report
#18130, which originated this new report and corresponding patch). It's
not an improvement on or an enhancement of the "old movemail". Currently
the emacs documentation on rmail states that it must work with the
external movemail and that it must support additional protocols (by
using this external tool). But both assertions are currently false. The
rmail code already supports both movemail backends, indeed, but the
support for the mailutils one is mostly broken.

Cheers
--
Carlos




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#18278; Package emacs. (Tue, 09 Sep 2014 15:52:02 GMT) Full text and rfc822 format available.

Message #19 received at 18278 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Carlos Pita <carlosjosepita <at> gmail.com>
Cc: gray <at> gnu.org, bug-mailutils <at> gnu.org, monnier <at> IRO.UMontreal.CA,
 18278 <at> debbugs.gnu.org
Subject: Re: bug#18278: [PATCH] bug#18130: rmail.el: handle imaps, pops,
 and local source mailboxes (maildir, MH, etc.)
Date: Tue, 09 Sep 2014 18:51:56 +0300
> From: Carlos Pita <carlosjosepita <at> gmail.com>
> Cc: Stefan Monnier <monnier <at> IRO.UMontreal.CA>,  gray <at> gnu.org,  bug-mailutils <at> gnu.org,  18278 <at> debbugs.gnu.org
> Date: Tue, 09 Sep 2014 12:46:08 -0300
> 
> > So the only issue that bothers me here is: would the new code still
> > work with the old movemail, and how does the code detect whether it
> > invokes old or new one?
> 
> please take into account that this is mainly a bug fix (see bug report
> #18130, which originated this new report and corresponding patch). It's
> not an improvement on or an enhancement of the "old movemail". Currently
> the emacs documentation on rmail states that it must work with the
> external movemail and that it must support additional protocols (by
> using this external tool). But both assertions are currently false. The
> rmail code already supports both movemail backends, indeed, but the
> support for the mailutils one is mostly broken.

Yes, I understand all that (I've read the patch).  But I don't think a
bugfix necessarily avoids the danger of breaking backwards
compatibility, which is why I asked.  I think my question still
stands.




Merged 18130 18278 26376. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Sun, 09 Apr 2017 01:08:02 GMT) Full text and rfc822 format available.

Added tag(s) confirmed. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Sun, 09 Apr 2017 01:08:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#18278; Package emacs. (Sun, 09 Apr 2017 01:45:02 GMT) Full text and rfc822 format available.

Message #26 received at 18278 <at> debbugs.gnu.org (full text, mbox):

From: Glenn Morris <rgm <at> gnu.org>
To: Sergey Poznyakoff <gray <at> gnu.org>
Cc: Carlos Pita <carlosjosepita <at> gmail.com>, 18278 <at> debbugs.gnu.org
Subject: Re: bug#18278: [PATCH] bug#18130: rmail.el: handle imaps, pops,
 and local source mailboxes (maildir, MH, etc.)
Date: Sat, 08 Apr 2017 21:44:12 -0400
Thank you for the patch. I am sorry it was forgotten about.
Finally applied as 48536f6.




bug marked as fixed in version 26.1, send any further explanations to 18278 <at> debbugs.gnu.org and Sergey Poznyakoff <gray <at> gnu.org> Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Sun, 09 Apr 2017 01:45:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 07 May 2017 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 8 years and 43 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.