(message "Done")
(kill-emacs (if error 1 0))))
-(declare-function mail-strip-quoted-names "mail-utils" (address))
+(declare-function mail-mbox-from "mail-utils" ())
+(defvar rmime-magic-string) ; in rmime.el, if you have it
;;;###autoload
(defun unrmail (file to-file)
(buffer-substring (point)
(save-excursion (forward-line 1)
(point))))
- (search-forward ",,")
+ (re-search-forward ",, ?")
(unless (eolp)
(setq keywords
(buffer-substring (point)
(progn (end-of-line)
(1- (point)))))
- (setq keywords
- (replace-regexp-in-string ", " "," keywords)))
+ ;; Mbox rmail needs the spaces. Bug#2303.
+ ;;; (setq keywords
+ ;;; (replace-regexp-in-string ", " "," keywords))
+ )
(setq attrs
(list
(save-excursion (search-forward "\n\n" nil 'move) (point)))
;; Fetch or construct what we should use in the `From ' line.
- (setq mail-from
- (or (mail-fetch-field "Mail-From")
- (concat "From "
- (mail-strip-quoted-names
- (or (mail-fetch-field "from")
- (mail-fetch-field "really-from")
- (mail-fetch-field "sender")
- "unknown"))
- " "
- (let ((date (mail-fetch-field "date")))
- (or
- (and date
- (ignore-errors
- (current-time-string
- (date-to-time date))))
- (current-time-string))))))
+ (setq mail-from (or (let ((from (mail-fetch-field "Mail-From")))
+ ;; mail-mbox-from (below) returns a
+ ;; string that ends in a newline, but
+ ;; but mail-fetch-field does not, so
+ ;; we append a newline here.
+ (if from
+ (format "%s\n" from)))
+ (mail-mbox-from)))
;; If the message specifies a coding system, use it.
(let ((maybe-coding (mail-fetch-field "X-Coding-System")))
(goto-char (point-min))
;; Insert the `From ' line.
- (insert mail-from "\n")
+ (insert mail-from)
;; Record the keywords and attributes in our special way.
(insert "X-RMAIL-ATTRIBUTES: " (apply 'string attrs) "\n")
(when keywords
(while (search-forward "\nFrom " nil t)
(forward-char -5)
(insert ?>)))
+ ;; Make sure the message ends with two newlines
+ (goto-char (point-max))
+ (unless (looking-back "\n\n")
+ (insert "\n"))
;; Write it to the output file, suitably encoded.
(let ((coding-system-for-write coding))
(write-region (point-min) (point-max) to-file t