raible@EW09.NAS.NASA.GOV (Eric L. Raible) (11/29/88)
I think that anyone who uses rmail will find this to be a welcome addition. (defvar mail-unsent-separator "^ ----- Unsent message follows -----$") (setq rmail-mode-hook '((lambda () (define-key rmail-mode-map "e" 'rmail-extract-rejected-message)))) (defun rmail-extract-rejected-message () "Edit a mail message which is based on the contents of the current message. For a message rejected by the mail system, extract the interesting headers and the body of the original message; otherwise copy the current message." (interactive) (rmail-beginning-of-message) (re-search-forward mail-unsent-separator nil t) (let* ((to (rmail-get-field "To")) (subj (rmail-get-field "Subject")) (irp2 (rmail-get-field "In-reply-to")) (cc (rmail-get-field "Cc")) (orig-message (buffer-substring (progn (search-forward "\n\n") (point)) (point-max))) (mail-setup-hook (function (lambda () (goto-char (point-max)) (insert orig-message) (mail-to))))) (rmail-beginning-of-message) (mail-other-window nil to subj irp2 cc (current-buffer)))) (defun rmail-get-field (field-name) (save-excursion (let ((case-fold-search t)) (if (re-search-forward (concat "^" field-name ": ") nil t) (buffer-substring (point) (progn (end-of-line) (point)))))))
raible@EW09.NAS.NASA.GOV (Eric L. Raible) (01/21/89)
mh-mode has it, rmail mode didn't, so here it is. I put rmail-extract-rejected-message on 'e' (and use x for expunge). ;; GNU Emacs and this file "rmail-extract.el", is distributed in the hope ;; that it will be useful, but WITHOUT ANY WARRANTY. No author or ;; distributor accepts responsibility to anyone for the consequences ;; of using it or for whether it serves any particular purpose or ;; works at all, unless he says so in writing. Refer to the GNU Emacs ;; General Public License for full details. ;; Everyone is granted permission to copy, modify and redistribute GNU ;; Emacs and rmail-extract.el, but only under the conditions described in ;; the GNU Emacs General Public License. A copy of this license is ;; supposed to have been given to you along with GNU Emacs so you can ;; know your rights and responsibilities. It should be in a file ;; named COPYING. Among other things, the copyright notice and this ;; notice must be preserved on all copies. (defvar mail-unsent-separator "^ ----- Unsent message follows -----$") (defun rmail-extract-rejected-message () "Create a message to be sent based on the current RMAIL message. Any text in the RMAIL message before mail-unsend-separator is ignored. This function can also be meaningfully used to messages that have *not* been rejected. Try it and see." (interactive) (rmail-beginning-of-message) (re-search-forward mail-unsent-separator nil t) (let* ((to (rmail-get-field "To")) (subj (rmail-get-field "Subject")) (irp2 (rmail-get-field "In-reply-to")) (cc (rmail-get-field "Cc")) (orig-message (buffer-substring (progn (re-search-forward "\n\n") (point)) (point-max))) (mail-setup-hook (function (lambda () (goto-char (point-max)) (insert orig-message) (mail-to))))) (rmail-beginning-of-message) (mail-other-window nil to subj irp2 cc (current-buffer)))) (defun rmail-get-field (field-name) (save-excursion (let ((case-fold-search t)) (if (re-search-forward (concat "^" field-name ": ") nil t) (buffer-substring (point) (progn (end-of-line) (point)))))))