Function: rmail-insert-inbox-text
rmail-insert-inbox-text is a byte-compiled function defined in
rmail.el.gz.
Signature
(rmail-insert-inbox-text FILES RENAMEP)
Source Code
;; Defined in /usr/src/emacs/lisp/mail/rmail.el.gz
(defun rmail-insert-inbox-text (files renamep)
(let (file tofile delete-files 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 proto (nth 1 url-data))
(setq password (nth 2 url-data))
(setq got-password (nth 3 url-data)))
(if proto
(setq renamep t)
(setq file (file-truename
(substitute-in-file-name (expand-file-name file)))))
(setq tofile (expand-file-name
;; Generate name to move to from inbox name,
;; in case of multiple inboxes that need moving.
(concat ".newmail-"
(file-name-nondirectory
(if (memq system-type '(windows-nt cygwin ms-dos))
;; cannot have colons in file name
(string-replace ":" "-" file)
file)))
;; Use the directory of this rmail file
;; because it's a nuisance to use the homedir
;; if that is on a full disk and this rmail
;; file isn't.
(file-name-directory
(expand-file-name buffer-file-name))))
;; Always use movemail to rename the file,
;; since there can be mailboxes in various directories.
(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 (proto
(message "Getting mail from %s..."
(if (rmail-remote-proto-p proto)
"the remote server"
proto)))
((and (file-exists-p tofile)
(/= 0 (file-attribute-size (file-attributes tofile))))
(message "Getting mail from %s..." tofile))
((and (file-exists-p file)
(/= 0 (file-attribute-size (file-attributes file))))
(message "Getting mail from %s..." file)))
;; Set TOFILE if have not already done so, and
;; 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 proto)
(not (file-exists-p file))))
nil)
(t
(with-temp-buffer
(let ((errors (current-buffer)))
(buffer-disable-undo errors)
(let ((args
(append
(list (or rmail-movemail-program
movemail-program-name)
nil errors nil)
(if rmail-preserve-inbox
(list "-p")
nil)
(if (rmail-movemail-variant-p 'mailutils)
(append (list "--emacs") rmail-movemail-flags)
rmail-movemail-flags)
(list file tofile)
(if password (list password) nil))))
(apply #'call-process args))
(if (not (buffer-modified-p errors))
;; No output => movemail won
nil
(set-buffer errors)
(subst-char-in-region (point-min) (point-max)
?\n ?\s)
(goto-char (point-max))
(skip-chars-backward " \t")
(delete-region (point) (point-max))
(goto-char (point-min))
(if (looking-at "movemail: ")
(delete-region (point-min) (match-end 0)))
(beep t)
;; 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 (and proto
(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
;; abbreviation
(when (rmail-movemail-variant-p 'mailutils)
(goto-char (point-min))
(when (looking-at "[A-Z][A-Z0-9_]*:")
(delete-region (point-min) (match-end 0))))
(message "movemail: %s"
(buffer-substring (point-min)
(point-max)))
(sit-for 3)
nil)))))
;; At this point, TOFILE contains the name to read:
;; Either the alternate name (if we renamed)
;; or the actual inbox (if not renaming).
(if (file-exists-p tofile)
(let ((coding-system-for-read 'no-conversion)
size)
(goto-char (point-max))
(setq size
;; If new mail is in Babyl format, convert it to mbox.
(rmail-unrmail-new-mail-maybe
tofile
(nth 1 (insert-file-contents tofile))))
(goto-char (point-max))
;; Make sure the read-in mbox data properly ends with a
;; blank line unless it is of size 0.
(unless (zerop size)
(while (not (looking-back "\n\n" (- (point) 2)))
(insert "\n")))
(if (not (and rmail-preserve-inbox (string= file tofile)))
(setq delete-files (cons tofile delete-files)))))
(message "")
(setq files (cdr files)))
delete-files))