Function: mail-source-fetch-pop
mail-source-fetch-pop is a byte-compiled function defined in
mail-source.el.gz.
Signature
(mail-source-fetch-pop SOURCE CALLBACK)
Documentation
Fetcher for single-file sources.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/mail-source.el.gz
(defun mail-source-fetch-pop (source callback)
"Fetcher for single-file sources."
(mail-source-bind (pop source)
;; fixme: deal with stream type in format specs
(mail-source-run-script
prescript
`((?p . ,password) (?t . ,mail-source-crash-box)
(?s . ,server) (?P . ,port) (?u . ,user))
prescript-delay)
(let ((from (format "%s:%s:%s" server user port))
(mail-source-string (format "pop:%s@%s" user server))
(process-environment (if server
(cons (concat "MAILHOST=" server)
process-environment)
process-environment))
result)
(when (eq authentication 'password)
(setq password
(or password
(cdr (assoc from mail-source-password-cache))
(read-passwd
(format "Password for %s at %s: " user server)))))
(setq result
(cond
(program
(mail-source-fetch-with-program
(format-spec
program
`((?p . ,password) (?t . ,mail-source-crash-box)
(?s . ,server) (?P . ,port) (?u . ,user)))))
(function
(funcall function mail-source-crash-box))
;; The default is to use pop3.el.
(t
(require 'pop3)
(dlet ((pop3-password password)
(pop3-maildrop user)
(pop3-mailhost server)
(pop3-port port)
(pop3-authentication-scheme
(if (eq authentication 'apop) 'apop 'pass))
(pop3-stream-type stream)
(pop3-leave-mail-on-server leave))
(if (or debug-on-quit debug-on-error)
(save-excursion (pop3-movemail mail-source-crash-box))
(condition-case err
(save-excursion (pop3-movemail mail-source-crash-box))
(error
;; We nix out the password in case the error
;; was because of a wrong password being given.
(setq mail-source-password-cache
(delq (assoc from mail-source-password-cache)
mail-source-password-cache))
(signal (car err) (cdr err)))))))))
(if result
(progn
(when (eq authentication 'password)
(unless (assoc from mail-source-password-cache)
(push (cons from password) mail-source-password-cache)))
(prog1
(mail-source-callback callback server)
;; Update display-time's mail flag, if relevant.
(if (equal source mail-source-primary-source)
(setq mail-source-new-mail-available nil))
(mail-source-run-script
postscript
`((?p . ,password) (?t . ,mail-source-crash-box)
(?s . ,server) (?P . ,port) (?u . ,user)))
(mail-source-delete-crash-box)))
;; We nix out the password in case the error
;; was because of a wrong password being given.
(setq mail-source-password-cache
(delq (assoc from mail-source-password-cache)
mail-source-password-cache))
0))))