(eval-when-compile (require 'cl))
(require 'nnheader)
-(require 'timezone)
(require 'message)
(require 'custom)
(require 'gnus-util)
:group 'nnmail-retrieve
:type 'string)
+(defcustom nnmail-movemail-args nil
+ "*Extra arguments to give to `nnmail-movemail-program' to move mail from the inbox.
+The default is nil"
+ :group 'nnmail-files
+ :group 'nnmail-retrieve
+ :type 'string)
+
(defcustom nnmail-pop-password-required nil
"*Non-nil if a password is required when reading mail using POP."
:group 'nnmail-retrieve
(const warn)
(const delete)))
+(defcustom nnmail-extra-headers nil
+ "*Extra headers to parse."
+ :group 'nnmail
+ :type '(repeat symbol))
+
+(defcustom nnmail-split-header-length-limit 1024
+ "Header lines longer than this limit are excluded from the split function."
+ :group 'nnmail
+ :type 'integer)
+
;;; Internal variables.
(defvar nnmail-split-history nil
(defvar nnmail-file-coding-system 'binary
"Coding system used in nnmail.")
+(defvar nnmail-file-coding-system-1
+ (if (string-match "nt" system-configuration)
+ 'raw-text-dos 'binary)
+ "Another coding system used in nnmail.")
+
+(defvar nnmail-incoming-coding-system
+ mm-text-coding-system
+ "Coding system used in reading inbox")
+
(defun nnmail-find-file (file)
"Insert FILE in server buffer safely."
(set-buffer nntp-server-buffer)
- (erase-buffer)
+ (delete-region (point-min) (point-max))
(let ((format-alist nil)
(after-insert-file-functions nil))
(condition-case ()
(let ((coding-system-for-read nnmail-file-coding-system)
+ (auto-mode-alist (nnheader-auto-mode-alist))
(pathname-coding-system nnmail-file-coding-system))
(insert-file-contents file)
t)
(concat dir group "/")
;; If not, we translate dots into slashes.
(concat dir
- (nnheader-encode-coding-string
+ (mm-encode-coding-string
(nnheader-replace-chars-in-string group ?. ?/)
nnmail-pathname-coding-system)
"/")))
nnmail-movemail-program exec-directory)
nil errors nil inbox tofile)
(when nnmail-internal-password
- (list nnmail-internal-password)))))))
+ (list nnmail-internal-password))
+ (when nnmail-movemail-args
+ nnmail-movemail-args))))))
(push inbox nnmail-moved-inboxes)
(if (and (not (buffer-modified-p errors))
(zerop result))
(when (and (or (bobp)
(save-excursion
(forward-line -1)
- (= (following-char) ?\n)))
+ (eq (char-after) ?\n)))
(save-excursion
(forward-line 1)
(while (looking-at ">From \\|From ")
(when (and (or (bobp)
(save-excursion
(forward-line -1)
- (= (following-char) ?\n)))
+ (eq (char-after) ?\n)))
(save-excursion
(forward-line 1)
(while (looking-at ">From \\|From ")
(save-excursion
;; Insert the incoming file.
(set-buffer (get-buffer-create " *nnmail incoming*"))
- (buffer-disable-undo (current-buffer))
(erase-buffer)
- (nnheader-insert-file-contents incoming)
+ (let ((nnheader-file-coding-system nnmail-incoming-coding-system))
+ (nnheader-insert-file-contents incoming))
(unless (zerop (buffer-size))
(goto-char (point-min))
(save-excursion (run-hooks 'nnmail-prepare-incoming-hook))
(goto-char (point-min))
(while (not (eobp))
(end-of-line)
- (if (> (current-column) 1024)
- (gnus-delete-line)
+ (if (> (current-column) nnmail-split-header-length-limit)
+ (delete-region (point) (progn (end-of-line) (point)))
(forward-line 1)))
;; Allow washing.
(goto-char (point-min))
;; group twice.
(not (assoc (car method) group-art)))
(push (cons (if regrepp
- (replace-match
- (car method) nil nil (car method))
+ (nnmail-expand-newtext (car method))
(car method))
(funcall func (car method)))
group-art))
(insert (format "Xref: %s" (system-name)))
(while group-alist
(insert (format " %s:%d"
- (nnheader-encode-coding-string
+ (mm-encode-coding-string
(caar group-alist)
nnmail-pathname-coding-system)
(cdar group-alist)))
(set-buffer
(setq nnmail-cache-buffer
(get-buffer-create " *nnmail message-id cache*")))
- (buffer-disable-undo (current-buffer))
(when (file-exists-p nnmail-message-id-cache-file)
(nnheader-insert-file-contents nnmail-message-id-cache-file))
(set-buffer-modified-p nil)
;; Let the backend save the article (or not).
(cond
((not duplication)
- (nnmail-cache-insert message-id)
(funcall func (setq group-art
- (nreverse (nnmail-article-group artnum-func)))))
+ (nreverse (nnmail-article-group artnum-func))))
+ (nnmail-cache-insert message-id))
((eq action 'delete)
(setq group-art nil))
((eq action 'warn)
((numberp days)
(setq days (days-to-time days))
;; Compare the time with the current time.
- (time-less-p days (time-since time)))))))
+ (condition-case ()
+ (time-less-p days (time-since time))
+ (error nil)))))))
(defvar nnmail-read-passwd nil)
(defun nnmail-read-passwd (prompt &rest args)
(goto-char (point-min))
(while (re-search-forward "[^ \t=]+" nil t)
(setq name (match-string 0))
- (if (not (= (following-char) ?=))
+ (if (not (eq (char-after) ?=))
;; Implied "yes".
(setq value "yes")
(forward-char 1)
- (if (not (= (following-char) ?\"))
+ (if (not (eq (char-after) ?\"))
(if (not (looking-at "[^ \t]"))
;; Implied "no".
(setq value "no")
(defun nnmail-pop3-movemail (inbox crashbox)
"Function to move mail from INBOX on a pop3 server to file CRASHBOX."
(let ((pop3-maildrop
- (substring inbox (match-end (string-match "^po:" inbox)))))
+ (substring inbox (match-end (string-match "^po:" inbox))))
+ (pop3-password
+ (or nnmail-pop-password
+ (nnmail-read-passwd
+ (format "Password for %s: " inbox)))))
(pop3-movemail crashbox)))
(defun nnmail-within-headers-p ()