;;; mail-source.el --- functions for fetching mail
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news, mail
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
(eval-and-compile
(autoload 'pop3-movemail "pop3")
(autoload 'pop3-get-message-count "pop3")
- (autoload 'nnheader-cancel-timer "nnheader")
- (autoload 'nnheader-run-at-time "nnheader"))
+ (autoload 'nnheader-cancel-timer "nnheader"))
(require 'format-spec)
(require 'mm-util)
(require 'message) ;; for `message-directory'
(defcustom mail-source-ignore-errors nil
"*Ignore errors when querying mail sources.
If nil, the user will be prompted when an error occurs. If non-nil,
-the error will be ignored.")
+the error will be ignored."
+ :version "22.1"
+ :group 'mail-source
+ :type 'boolean)
(defcustom mail-source-primary-source nil
"*Primary source for incoming mail.
:type 'file)
(defcustom mail-source-directory message-directory
- "Directory where files (if any) will be stored."
+ "Directory where incoming mail source files (if any) will be stored."
:group 'mail-source
:type 'directory)
:group 'mail-source
:type 'integer)
-(defcustom mail-source-delete-incoming t
+(defcustom mail-source-delete-incoming nil
"*If non-nil, delete incoming files after handling.
If t, delete immediately, if nil, never delete. If a positive number, delete
files older than number of days."
"*If non-nil, ask for for confirmation before deleting old incoming files.
This variable only applies when `mail-source-delete-incoming' is a positive
number."
+ :version "22.1"
:group 'mail-source
:type 'boolean)
(defcustom mail-source-movemail-program nil
"If non-nil, name of program for fetching new mail."
+ :version "22.1"
:group 'mail-source
:type '(choice (const nil) string))
(when (file-exists-p mail-source-crash-box)
(message "Processing mail from %s..." mail-source-crash-box)
(setq found (mail-source-callback
- callback mail-source-crash-box)))
+ callback mail-source-crash-box))
+ (mail-source-delete-crash-box))
(+ found
(if (or debug-on-quit debug-on-error)
(funcall function source callback)
(format "Mail source %s error (%s). Continue? "
(if (memq ':password source)
(let ((s (copy-sequence source)))
- (setcar (cdr (memq ':password s))
+ (setcar (cdr (memq ':password s))
"********")
s)
source)
(delete-file ffile))))))
(defun mail-source-callback (callback info)
- "Call CALLBACK on the mail file, and then remove the mail file.
-Pass INFO on to CALLBACK."
+ "Call CALLBACK on the mail file. Pass INFO on to CALLBACK."
(if (or (not (file-exists-p mail-source-crash-box))
(zerop (nth 7 (file-attributes mail-source-crash-box))))
(progn
(when (file-exists-p mail-source-crash-box)
(delete-file mail-source-crash-box))
0)
- (prog1
- (funcall callback mail-source-crash-box info)
- (when (file-exists-p mail-source-crash-box)
- ;; Delete or move the incoming mail out of the way.
- (if (eq mail-source-delete-incoming t)
- (delete-file mail-source-crash-box)
- (let ((incoming
- (mm-make-temp-file
- (expand-file-name
- mail-source-incoming-file-prefix
- mail-source-directory))))
- (unless (file-exists-p (file-name-directory incoming))
- (make-directory (file-name-directory incoming) t))
- (rename-file mail-source-crash-box incoming t)
- ;; remove old incoming files?
- (when (natnump mail-source-delete-incoming)
- (mail-source-delete-old-incoming
- mail-source-delete-incoming
- mail-source-delete-old-incoming-confirm))))))))
+ (funcall callback mail-source-crash-box info)))
+
+(defun mail-source-delete-crash-box ()
+ (when (file-exists-p mail-source-crash-box)
+ ;; Delete or move the incoming mail out of the way.
+ (if (eq mail-source-delete-incoming t)
+ (delete-file mail-source-crash-box)
+ (let ((incoming
+ (mm-make-temp-file
+ (expand-file-name
+ mail-source-incoming-file-prefix
+ mail-source-directory))))
+ (unless (file-exists-p (file-name-directory incoming))
+ (make-directory (file-name-directory incoming) t))
+ (rename-file mail-source-crash-box incoming t)
+ ;; remove old incoming files?
+ (when (natnump mail-source-delete-incoming)
+ (mail-source-delete-old-incoming
+ mail-source-delete-incoming
+ mail-source-delete-old-incoming-confirm))))))
(defun mail-source-movemail (from to)
"Move FROM to TO using movemail."
(prog1
(mail-source-callback callback path)
(mail-source-run-script
- postscript (format-spec-make ?t mail-source-crash-box)))
+ postscript (format-spec-make ?t mail-source-crash-box))
+ (mail-source-delete-crash-box))
0))))
(defun mail-source-fetch-directory (source callback)
(when (and (file-regular-p file)
(funcall predicate file)
(mail-source-movemail file mail-source-crash-box))
- (incf found (mail-source-callback callback file))))
- (mail-source-run-script postscript (format-spec-make ?t path))
+ (incf found (mail-source-callback callback file))
+ (mail-source-run-script postscript (format-spec-make ?t path))
+ (mail-source-delete-crash-box)))
found)))
(defun mail-source-fetch-pop (source callback)
(mail-source-run-script
postscript
(format-spec-make ?p password ?t mail-source-crash-box
- ?s server ?P port ?u user))))
+ ?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
"Open and close a POP connection shortly.
POP server should be defined in `mail-source-primary-source' (which is
preferred) or `mail-sources'. You may use it for the POP-before-SMTP
-authentication. To do that, you need to set the option
-`message-send-mail-function' to `message-smtpmail-send-it' and put the
-following line in .gnus file:
+authentication. To do that, you need to set the
+`message-send-mail-function' variable as `message-smtpmail-send-it'
+and put the following line in your ~/.gnus.el file:
\(add-hook 'message-send-mail-hook 'mail-source-touch-pop)
-"
+
+See the Gnus manual for details."
(let ((sources (if mail-source-primary-source
(list mail-source-primary-source)
mail-sources)))
(eval-when-compile
(if (featurep 'xemacs)
- (require 'itimer)
+ (require 'timer-funcs)
(require 'timer)))
(defun mail-source-start-idle-timer ()
(setq display-time-mail-function #'mail-source-new-mail-p)
;; Set up the main timer.
(setq mail-source-report-new-mail-timer
- (nnheader-run-at-time
+ (run-at-time
(* 60 mail-source-report-new-mail-interval)
(* 60 mail-source-report-new-mail-interval)
#'mail-source-start-idle-timer))
;; MMDF mail format
(insert "\001\001\001\001\n"))
(delete-file file)))))
- (incf found (mail-source-callback callback file))))))
+ (incf found (mail-source-callback callback file))
+ (mail-source-delete-crash-box)))))
found)))
(eval-and-compile
(insert "From imap " (current-time-string) "\n")
(save-excursion
(insert str "\n\n"))
- (while (re-search-forward "^From " nil t)
+ (while (let ((case-fold-search nil))
+ (re-search-forward "^From " nil t))
(replace-match ">From "))
(goto-char (point-max))))
(nnheader-ms-strip-cr))
(incf found (mail-source-callback callback server))
+ (mail-source-delete-crash-box)
(when (and remove fetchflag)
(setq remove (nreverse remove))
(imap-message-flags-add
(push (cons (format "webmail:%s:%s" subtype user) password)
mail-source-password-cache)))
(webmail-fetch mail-source-crash-box subtype user password)
- (mail-source-callback callback (symbol-name subtype)))))
+ (mail-source-callback callback (symbol-name subtype))
+ (mail-source-delete-crash-box))))
(provide 'mail-source)
+;;; arch-tag: 72948025-1d17-4d6c-bb12-ef1aa2c490fd
;;; mail-source.el ends here