diff lisp/vm/vm-reply.el @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents 05472e90ae02
children c0c698873ce1
line wrap: on
line diff
--- a/lisp/vm/vm-reply.el	Mon Aug 13 09:00:04 2007 +0200
+++ b/lisp/vm/vm-reply.el	Mon Aug 13 09:02:59 2007 +0200
@@ -1,5 +1,5 @@
 ;;; Mailing, forwarding, and replying commands for VM
-;;; Copyright (C) 1989-1997 Kyle E. Jones
+;;; Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995 Kyle E. Jones
 ;;;
 ;;; This program is free software; you can redistribute it and/or modify
 ;;; it under the terms of the GNU General Public License as published by
@@ -29,12 +29,11 @@
 	 ((eq mlist mp)
 	  (cond ((setq to
 		       (let ((reply-to
-			      (vm-get-header-contents (car mp) "Reply-To:"
-						      ", ")))
+			      (vm-get-header-contents (car mp) "Reply-To:")))
 			 (if (vm-ignored-reply-to reply-to)
 			     nil
 			   reply-to ))))
-		((setq to (vm-get-header-contents (car mp) "From:" ", ")))
+		((setq to (vm-get-header-contents (car mp) "From:")))
 		;; bad, but better than nothing for some
 		((setq to (vm-grok-From_-author (car mp))))
 		(t (error "No From: or Reply-To: header in message")))
@@ -52,11 +51,9 @@
 				 subject)
 		   0)))
 	       (setq subject (concat vm-reply-subject-prefix subject))))
-	 (t (cond ((setq tmp (vm-get-header-contents (car mp) "Reply-To:"
-						     ", "))
+	 (t (cond ((setq tmp (vm-get-header-contents (car mp) "Reply-To:"))
 		   (setq to (concat to "," tmp)))
-		  ((setq tmp (vm-get-header-contents (car mp) "From:"
-						     ", "))
+		  ((setq tmp (vm-get-header-contents (car mp) "From:"))
 		   (setq to (concat to "," tmp)))
 		  ;; bad, but better than nothing for some
 		  ((setq tmp (vm-grok-From_-author (car mp)))
@@ -64,10 +61,8 @@
 		  (t (error "No From: or Reply-To: header in message")))))
 	(if to-all
 	    (progn
-	      (setq tmp (vm-get-header-contents (car mp) "To:"
-						", "))
-	      (setq tmp2 (vm-get-header-contents (car mp) "Cc:"
-						 ", "))
+	      (setq tmp (vm-get-header-contents (car mp) "To:"))
+	      (setq tmp2 (vm-get-header-contents (car mp) "Cc:"))
 	      (if tmp
 		  (if cc
 		      (setq cc (concat cc "," tmp))
@@ -77,14 +72,13 @@
 		      (setq cc (concat cc "," tmp2))
 		    (setq cc tmp2)))))
 	(setq references
-	      (cons (vm-get-header-contents (car mp) "References:" " ")
-		    (cons (vm-get-header-contents (car mp) "In-reply-to:" " ")
-			  (cons (vm-get-header-contents (car mp) "Message-ID:"
-							" ")
+	      (cons (vm-get-header-contents (car mp) "References:")
+		    (cons (vm-get-header-contents (car mp) "In-reply-to:")
+			  (cons (vm-get-header-contents (car mp) "Message-ID:")
 				references))))
 	(setq newsgroups
-	      (cons (or (and to-all (vm-get-header-contents (car mp) "Followup-To:" ","))
-			(vm-get-header-contents (car mp) "Newsgroups:" ","))
+	      (cons (or (and to-all (vm-get-header-contents (car mp) "Followup-To:"))
+			(vm-get-header-contents (car mp) "Newsgroups:"))
 		    newsgroups))
 	(setq mp (cdr mp)))
       (if vm-strip-reply-headers
@@ -130,10 +124,8 @@
 	       (concat "^" (regexp-quote mail-header-separator) "$") nil 0))
 	    (forward-char 1)
 	    (while mlist
-	      (save-restriction
-		(narrow-to-region (point) (point))
-		(vm-yank-message (car mlist))
-		(goto-char (point-max)))
+	      (vm-yank-message (car mlist))
+	      (goto-char (point-max))
 	      (setq mlist (cdr mlist)))))
       (run-hooks 'vm-reply-hook)
       (run-hooks 'vm-mail-mode-hook)))
@@ -200,8 +192,6 @@
     (setq newbuf (current-buffer))
     (if (not (eq major-mode 'vm-mode))
 	(vm-mode))
-    (if vm-presentation-buffer-handle
-	(vm-bury-buffer vm-presentation-buffer-handle))
     (if (null vm-message-pointer)
 	(error "No messages in folder %s" folder))
     (setq default (vm-number-of (car vm-message-pointer)))
@@ -285,52 +275,12 @@
     (save-restriction
       (widen)
       (save-excursion
-	(if (vectorp (vm-mm-layout message))
-	    (let* ((o (vm-mm-layout message))
-		   (type (car (vm-mm-layout-type o)))
-		   parts)
-	      (vm-insert-region-from-buffer (vm-buffer-of message)
-					    (vm-headers-of message)
-					    (vm-text-of message))
-	      (cond ((vm-mime-types-match "multipart" type)
-		     (setq parts (copy-sequence (vm-mm-layout-parts o))))
-		    (t (setq parts (list o))))
-	      (while parts
-		(cond ((vm-mime-text-type-p (car parts))
-		       (if (cond ((vm-mime-types-match
-				   "text/html"
-				   (car (vm-mm-layout-type (car parts))))
-				  (vm-mime-display-internal-text/html
-				   (car parts)))
-				 ((vm-mime-types-match
-				   "text/enriched"
-				   (car (vm-mm-layout-type (car parts))))
-				  (vm-mime-display-internal-text/enriched
-				   (car parts)))
-				 ((vm-mime-display-internal-text/plain
-				   (car parts) t)))
-			   nil
-			 ;; charset problems probably
-			 ;; just dump the raw bits
-			 (vm-mime-insert-mime-body (car parts))
-			 (vm-mime-transfer-decode-region (car parts)
-							 start (point)))
-		       (setq parts (cdr parts)))
-		      ((vm-mime-composite-type-p
-			(car (vm-mm-layout-type (car parts))))
-		       (setq parts (nconc (copy-sequence
-					   (vm-mm-layout-parts
-					    (car parts)))
-					  (cdr parts))))
-		      (t (setq parts (cdr parts)))))
-	      (setq end (point-marker)))
-	  (set-buffer (vm-buffer-of message))
-	  (save-restriction
-	    (widen)
-	    (append-to-buffer b (vm-headers-of message)
-			      (vm-text-end-of message))
-	    (setq end (vm-marker (+ start (- (vm-text-end-of message)
-					     (vm-headers-of message))) b)))))
+	(set-buffer (vm-buffer-of message))
+	(save-restriction
+	  (widen)
+	  (append-to-buffer b (vm-headers-of message) (vm-text-end-of message))
+	  (setq end (vm-marker (+ start (- (vm-text-end-of message)
+					   (vm-headers-of message))) b))))
       (push-mark end)
       (cond (mail-citation-hook (run-hooks 'mail-citation-hook))
 	    (mail-yank-hooks (run-hooks 'mail-yank-hooks))
@@ -340,18 +290,11 @@
   "Just like mail-send-and-exit except that VM flags the appropriate message(s)
 as having been replied to, if appropriate."
   (interactive "P")
-  (vm-check-for-killed-folder)
   (let ((b (current-buffer)))
     (vm-mail-send)
     (cond ((null (buffer-name b)) ;; dead buffer
-	   ;; This improves window configuration behavior in
-	   ;; XEmacs.  It avoids taking the folder buffer from
-	   ;; one frame and attaching it to the selected frame.
-	   (set-buffer (window-buffer (selected-window)))
 	   (vm-display nil nil '(vm-mail-send-and-exit)
-		       '(vm-mail-send-and-exit
-			 reading-message
-			 startup)))
+		       '(vm-mail-send-and-exit reading-message startup)))
 	  (t
 	   (vm-display b nil '(vm-mail-send-and-exit)
 		       '(vm-mail-send-and-exit reading-message startup))
@@ -370,9 +313,7 @@
 				vm-kept-mail-buffers)))
 	(mapcar (function
 		 (lambda (b)
-		   (and (buffer-name b)
-			(not (buffer-modified-p b))
-			(kill-buffer b))))
+		   (and (buffer-name b) (kill-buffer b))))
 		extras)
 	(and vm-kept-mail-buffers extras
 	     (setcdr (memq (car extras) vm-kept-mail-buffers) nil)))))
@@ -396,78 +337,27 @@
   (interactive)
   (if vm-tale-is-an-idiot
       (vm-help-tale))
-  ;; protect value of this-command from minibuffer read
-  (let ((this-command this-command))
-    (if (and vm-confirm-mail-send
-	     (not (y-or-n-p "Send the message? ")))
-	(error "Message not sent.")))
-  ;; send mail using MIME if user requests it and if the buffer
-  ;; has not already been MIME encoded.
-  (if (and vm-send-using-mime
-	   (null (vm-mail-mode-get-header-contents "MIME-Version:")))
-      (vm-mime-encode-composition))
+  (if (and vm-confirm-mail-send
+	   (not (y-or-n-p "Send the message? ")))
+      (error "Message not sent."))
   ;; this to prevent Emacs 19 from asking whether a message that
   ;; has already been sent should be sent again.  VM renames mail
   ;; buffers after the message has been sent, so the user should
   ;; already know that the message has been sent.
   (set-buffer-modified-p t)
-  (let ((composition-buffer (current-buffer))
-	;; preserve these in case the composition buffer gets
-	;; killed.
-	(vm-reply-list vm-reply-list)
-	(vm-forward-list vm-forward-list)
-	(vm-redistribute-list vm-redistribute-list))
-    ;; fragment message using message/partial if it is too big.
-    (if (and vm-send-using-mime
-	     (integerp vm-mime-max-message-size)
-	     (> (buffer-size) vm-mime-max-message-size))
-	(let (list)
-	  (setq list (vm-mime-fragment-composition vm-mime-max-message-size))
-	  (while list
-	    (save-excursion
-	      (set-buffer (car list))
-	      (vm-mail-send)
-	      (kill-buffer (car list)))
-	    (setq list (cdr list)))
-	  ;; what mail-send would have done
-	  (set-buffer-modified-p nil))
-      ;; don't want a buffer change to occur here
-      ;; save-excursion to be sure.
-      ;;
-      ;; also protect value of this-command from minibuffer reads
-      (let ((this-command this-command))
-	(save-excursion
-	  (mail-send))))
-    ;; be careful, something could have killed the composition
-    ;; buffer inside mail-send.
-    (if (eq (current-buffer) composition-buffer)
-	(progn
-	  (cond ((eq vm-system-state 'replying)
-		 (vm-mail-mark-replied))
-		((eq vm-system-state 'forwarding)
-		 (vm-mail-mark-forwarded))
-		((eq vm-system-state 'redistributing)
-		 (vm-mail-mark-redistributed)))
-	  (vm-rename-current-mail-buffer)
-	  (vm-keep-mail-buffer (current-buffer))))
-    (vm-display nil nil '(vm-mail-send) '(vm-mail-send))))
-
-(defun vm-mail-mode-get-header-contents (header-name-regexp)
-  (let ((contents nil)
-	regexp)
-    (setq regexp (concat "^\\(" header-name-regexp "\\)\\|\\(^"
-			 (regexp-quote mail-header-separator) "$\\)"))
-    (save-excursion
-      (save-restriction
-	(widen)
-	(goto-char (point-min))
-	(let ((case-fold-search t))
-	  (if (and (re-search-forward regexp nil t)
-		   (match-beginning 1)
-		   (progn (goto-char (match-beginning 0))
-			  (vm-match-header)))
-	      (vm-matched-header-contents)
-	    nil ))))))
+  ;; don't want a buffer change to occur here
+  ;; save-excursion to be sure.
+  (save-excursion
+    (mail-send))
+  (vm-rename-current-mail-buffer)
+  (cond ((eq vm-system-state 'replying)
+	 (vm-mail-mark-replied))
+	((eq vm-system-state 'forwarding)
+	 (vm-mail-mark-forwarded))
+	((eq vm-system-state 'redistributing)
+	 (vm-mail-mark-redistributed)))
+  (vm-keep-mail-buffer (current-buffer))
+  (vm-display nil nil '(vm-mail-send) '(vm-mail-send)))
 
 (defun vm-rename-current-mail-buffer ()
   (if vm-rename-current-buffer-function
@@ -595,15 +485,7 @@
   "Like vm-forward-message but always forwards all the headers."
   (interactive)
   (let ((vm-forwarded-headers nil)
-	(vm-unforwarded-header-regexp "only-drop-this-header")
-	;; set these because vm-forward-message calls vm-send-digest
-	;; if there is more than one message to be forwarded.
-	(vm-rfc934-digest-headers nil)
-	(vm-rfc934-digest-discard-header-regexp "only-drop-this-header")
-	(vm-rfc1153-digest-headers nil)
-	(vm-rfc1153-digest-discard-header-regexp "only-drop-this-header")
-	(vm-mime-digest-headers nil)
-	(vm-mime-digest-discard-header-regexp "only-drop-this-header"))
+	(vm-unforwarded-header-regexp "only-drop-this-header"))
     (vm-forward-message)))
 
 (defun vm-forward-message ()
@@ -616,17 +498,12 @@
   (vm-select-folder-buffer)
   (vm-check-for-killed-summary)
   (vm-error-if-folder-empty)
-  (if (and (eq last-command 'vm-next-command-uses-marks)
-	   (cdr (vm-select-marked-or-prefixed-messages 0)))
+  (if (eq last-command 'vm-next-command-uses-marks)
       (let ((vm-digest-send-type vm-forwarding-digest-type))
 	(setq this-command 'vm-next-command-uses-marks)
 	(command-execute 'vm-send-digest))
     (let ((dir default-directory)
-	  (miming (and vm-send-using-mime
-		       (equal vm-forwarding-digest-type "mime")))
-	  mail-buffer
-	  header-end
-	  (mp (vm-select-marked-or-prefixed-messages 1)))
+	  (mp vm-message-pointer))
       (save-restriction
 	(widen)
 	(vm-mail-internal
@@ -641,31 +518,10 @@
 	(setq vm-system-state 'forwarding
 	      vm-forward-list (list (car mp))
 	      default-directory dir)
-	(if miming
-	    (progn
-	      (setq mail-buffer (current-buffer))
-	      (set-buffer (generate-new-buffer "*vm-forward-buffer*"))
-	      (setq header-end (point))
-	      (insert "\n"))
-	  (goto-char (point-min))
-	  (re-search-forward (concat "^" (regexp-quote mail-header-separator)
-				     "\n"))
-	  (goto-char (match-end 0))
-	  (setq header-end (match-beginning 0)))
-	(cond ((equal vm-forwarding-digest-type "mime")
-	       (vm-mime-encapsulate-messages (list (car mp))
-					     vm-forwarded-headers
-					     vm-unforwarded-header-regexp
-					     nil)
-	       (goto-char header-end)
-	       (insert "MIME-Version: 1.0\n")
-	       (insert "Content-Type: message/rfc822\n")
-	       (insert "Content-Transfer-Encoding: "
-		       (vm-determine-proper-content-transfer-encoding
-			(point)
-			(point-max))
-		       "\n"))
-	      ((equal vm-forwarding-digest-type "rfc934")
+	(goto-char (point-min))
+	(re-search-forward
+	 (concat "^" (regexp-quote mail-header-separator) "\n") nil 0)
+	(cond ((equal vm-forwarding-digest-type "rfc934")
 	       (vm-rfc934-encapsulate-messages
 		vm-forward-list vm-forwarded-headers
 		vm-unforwarded-header-regexp))
@@ -673,19 +529,14 @@
 	       (vm-rfc1153-encapsulate-messages
 		vm-forward-list vm-forwarded-headers
 		vm-unforwarded-header-regexp))
+	      ((equal vm-forwarding-digest-type "rfc1521")
+	       (vm-rfc1521-encapsulate-messages
+		vm-forward-list vm-forwarded-headers
+		vm-unforwarded-header-regexp))
 	      ((equal vm-forwarding-digest-type nil)
 	       (vm-no-frills-encapsulate-message
 		(car vm-forward-list) vm-forwarded-headers
 		vm-unforwarded-header-regexp)))
-      (if miming
-	  (let ((b (current-buffer)))
-	    (set-buffer mail-buffer)
-	    (mail-text)
-	    (vm-mime-attach-object b "message/rfc822" nil nil t)
-	    (add-hook 'kill-buffer-hook
-		      (list 'lambda ()
-			    (list 'if (list 'eq mail-buffer '(current-buffer))
-				  (list 'kill-buffer b))))))
 	(mail-position-on-field "To"))
       (run-hooks 'vm-forward-message-hook)
       (run-hooks 'vm-mail-mode-hook))))
@@ -701,25 +552,20 @@
   (vm-error-if-folder-empty)
   (let ((b (current-buffer)) start
 	(dir default-directory)
-	(layout (vm-mm-layout (car vm-message-pointer)))
 	(lim (vm-text-end-of (car vm-message-pointer))))
       (save-restriction
 	(widen)
-	(if (or (not (vectorp layout))
-		(not (setq layout (vm-mime-layout-contains-type
-				   layout "message/rfc822"))))
-	    (save-excursion
-	      (goto-char (vm-text-of (car vm-message-pointer)))
-	      (let ((case-fold-search t))
-		;; What a wonderful world it would be if mailers
-		;; used a single message encapsulation standard
-		;; instead of all the weird variants. It is
-		;; useless to try to cover them all.  This simple
-		;; rule should cover the sanest of the formats
-		(if (not (re-search-forward "^Received:" lim t))
-		    (error "This doesn't look like a bounced message."))
-		(beginning-of-line)
-		(setq start (point)))))
+	(save-excursion
+	  (goto-char (vm-text-of (car vm-message-pointer)))
+	  (let ((case-fold-search t))
+	    ;; What a wonderful world it would be if mailers used a single
+	    ;; message encapsulation standard instead all the weird variants
+	    ;; It is useless to try to cover them all.
+	    ;; This simple rule should cover the sanest of the formats
+	    (if (not (re-search-forward "^Received:" lim t))
+		(error "This doesn't look like a bounced message."))
+	    (beginning-of-line)
+	    (setq start (point))))
 	;; briefly nullify vm-mail-header-from to keep vm-mail-internal
 	;; from inserting another From header.
 	(let ((vm-mail-header-from nil))
@@ -727,12 +573,7 @@
 	   (format "retry of bounce from %s"
 		   (vm-su-from (car vm-message-pointer)))))
 	(goto-char (point-min))
-	(if (vectorp layout)
-	    (progn
-	      (setq start (point))
-	      (vm-mime-insert-mime-body layout)
-	      (vm-mime-transfer-decode-region layout start (point)))
-	  (insert-buffer-substring b start lim))
+	(insert-buffer-substring b start lim)
 	(delete-region (point) (point-max))
 	(goto-char (point-min))
 	;; delete all but pertinent headers
@@ -743,10 +584,7 @@
 	    (replace-match "")
 	  (goto-char (point-max)))
 	(insert ?\n mail-header-separator ?\n)
-	(goto-char (point-min))
-	(if vm-mail-header-from
-	    (insert "Resent-From: " vm-mail-header-from ?\n))
-	(mail-position-on-field "Resent-To")
+	(mail-position-on-field "To")
 	(setq default-directory dir)))
   (run-hooks 'vm-resend-bounced-message-hook)
   (run-hooks 'vm-mail-mode-hook))
@@ -756,10 +594,10 @@
 The current message will be copied to a Mail mode buffer and you
 can edit the message and send it as usual.
 
-NOTE: since you are doing a resend, a Resent-To header is provided
-for you to fill in the new recipient list.  If you don't fill in
-this header, what happens when you send the message is undefined.
-You may also create a Resent-Cc header."
+NOTE: since you are doing a resend, a Resent-To header is
+provided for you to fill in.  If you don't fill it in, when you
+send the message it will go to the original recipients listed in
+the To and Cc headers.  You may also create a Resent-Cc header."
   (interactive)
   (vm-follow-summary-cursor)
   (vm-select-folder-buffer)
@@ -824,14 +662,13 @@
   (vm-check-for-killed-summary)
   (vm-error-if-folder-empty)
   (let ((dir default-directory)
-	(miming (and vm-send-using-mime (equal vm-digest-send-type "mime")))
-	mp mail-buffer b
+	(mp vm-message-pointer)
 	;; prefix arg doesn't have "normal" meaning here, so only call
 	;; vm-select-marked-or-prefixed-messages if we're using marks.
 	(mlist (if (eq last-command 'vm-next-command-uses-marks)
 		   (vm-select-marked-or-prefixed-messages 0)
 		 vm-message-list))
-	start header-end boundary)
+	start)
     (save-restriction
       (widen)
       (vm-mail-internal (format "digest from %s" (buffer-name)))
@@ -839,64 +676,30 @@
       (setq vm-system-state 'forwarding
 	    vm-forward-list mlist
 	    default-directory dir)
-      (if miming
-	  (progn
-	    (setq mail-buffer (current-buffer))
-	    (set-buffer (generate-new-buffer "*vm-digest-buffer*"))
-	    (setq header-end (point))
-	    (insert "\n")
-	    (setq start (point-marker)))
-	(goto-char (point-min))
-	(re-search-forward (concat "^" (regexp-quote mail-header-separator)
-				   "\n"))
-	(goto-char (match-end 0))
-	(setq start (point-marker)
-	      header-end (match-beginning 0)))
-      (message "Building %s digest..." vm-digest-send-type)
-      (cond ((equal vm-digest-send-type "mime")
-	     (setq boundary (vm-mime-encapsulate-messages
-			     mlist vm-mime-digest-headers
-			     vm-mime-digest-discard-header-regexp
-			     t))
-	     (goto-char header-end)
-	     (insert "MIME-Version: 1.0\n")
-	     (insert (if vm-mime-avoid-folding-content-type
-			 "Content-Type: multipart/digest; boundary=\""
-		       "Content-Type: multipart/digest;\n\tboundary=\"")
-		     boundary "\"\n")
-	     (insert "Content-Transfer-Encoding: "
-		     (vm-determine-proper-content-transfer-encoding
-		      (point)
-		      (point-max))
-		     "\n"))
-	    ((equal vm-digest-send-type "rfc934")
+      (goto-char (point-min))
+      (re-search-forward (concat "^" (regexp-quote mail-header-separator)
+				 "\n"))
+      (goto-char (match-end 0))
+      (setq start (point)
+	    mp mlist)
+      (vm-unsaved-message "Building %s digest..." vm-digest-send-type)
+      (cond ((equal vm-digest-send-type "rfc934")
 	     (vm-rfc934-encapsulate-messages
 	      mlist vm-rfc934-digest-headers
 	      vm-rfc934-digest-discard-header-regexp))
 	    ((equal vm-digest-send-type "rfc1153")
 	     (vm-rfc1153-encapsulate-messages
 	      mlist vm-rfc1153-digest-headers
-	      vm-rfc1153-digest-discard-header-regexp)))
+	      vm-rfc1153-digest-discard-header-regexp))
+	    ((equal vm-digest-send-type "rfc1521")
+	     (vm-rfc1521-encapsulate-messages
+	      mlist vm-rfc1521-digest-headers
+	      vm-rfc1521-digest-discard-header-regexp)))
       (goto-char start)
       (setq mp mlist)
-      (if miming
-	  (let ((b (current-buffer)))
-	    (set-buffer mail-buffer)
-	    (mail-text)
-	    (vm-mime-attach-object b "multipart/digest"
-				   (list (concat "boundary=\""
-						 boundary "\"")) nil t)
-	    (add-hook 'kill-buffer-hook
-		      (list 'lambda ()
-			    (list 'if (list 'eq mail-buffer '(current-buffer))
-				  (list 'kill-buffer b))))))
       (if prefix
-	  (save-excursion
-	    (message "Building digest preamble...")
-	    (if miming
-		(progn
-		  (set-buffer mail-buffer)
-		  (mail-text)))
+	  (progn
+	    (vm-unsaved-message "Building digest preamble...")
 	    (while mp
 	      (let ((vm-summary-uninteresting-senders nil))
 		(insert (vm-sprintf 'vm-digest-preamble-format (car mp)) "\n"))
@@ -923,10 +726,10 @@
   (let ((vm-digest-send-type "rfc1153"))
     (vm-send-digest preamble)))
 
-(defun vm-send-mime-digest (&optional preamble)
-  "Like vm-send-digest but always sends an MIME (multipart/digest) digest."
+(defun vm-send-rfc1521-digest (&optional preamble)
+  "Like vm-send-digest but always sends an RFC 1521 (MIME) digest."
   (interactive "P")
-  (let ((vm-digest-send-type "mime"))
+  (let ((vm-digest-send-type "rfc1521"))
     (vm-send-digest preamble)))
 
 (defun vm-continue-composing-message (&optional not-picky)
@@ -946,8 +749,7 @@
 	  ;; different composition buffer.
 	  (vm-unbury-buffer b)
 	  (set-buffer b)
-	  (if (and vm-mutable-frames vm-frame-per-composition
-		   (vm-multiple-frames-possible-p)
+	  (if (and vm-frame-per-composition (vm-multiple-frames-possible-p)
 		   ;; only pop up a frame if there's an undisplay
 		   ;; hook in place to make the frame go away.
 		   vm-undisplay-buffer-hook)
@@ -965,14 +767,6 @@
 		      '(vm-continue-composing-message composing-message)))
       (message "No composition buffers found"))))
 
-(defun vm-mail-to-mailto-url (url)
-  (let ((address (car (vm-parse url "^mailto:\\(.+\\)"))))
-    (vm-select-folder-buffer)
-    (vm-check-for-killed-summary)
-    (vm-mail-internal nil address)
-    (run-hooks 'vm-mail-hook)
-    (run-hooks 'vm-mail-mode-hook)))
-
 ;; to quiet the v19 byte compiler
 (defvar mail-mode-map)
 (defvar mail-aliases)
@@ -995,15 +789,15 @@
     ;; do it only once.
     (if (not vm-mail-mode-map-parented)
 	(cond ((fboundp 'set-keymap-parents)
-	       (set-keymap-parents vm-mail-mode-map (list mail-mode-map))
-	       (setq vm-mail-mode-map-parented t))
+	       (set-keymap-parents vm-mail-mode-map (list mail-mode-map)))
 	      ((consp mail-mode-map)
 	       (nconc vm-mail-mode-map mail-mode-map)
 	       (setq vm-mail-mode-map-parented t))))
     (setq vm-mail-buffer folder-buffer
-	  mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3
+	  mode-popup-menu (and vm-use-menus
 			       (vm-menu-support-possible-p)
 			       (vm-menu-mode-menu)))
+    ;; sets up popup menu for FSF Emacs
     (and vm-use-menus (vm-menu-support-possible-p)
 	 (vm-menu-install-mail-mode-menu))
     (if (fboundp 'mail-aliases-setup) ; use mail-abbrevs.el if present
@@ -1011,7 +805,7 @@
       (if (eq mail-aliases t)
 	  (progn
 	    (setq mail-aliases nil)
-	    (if (file-exists-p (or mail-personal-alias-file "~/.mailrc"))
+	    (if (file-exists-p "~/.mailrc")
 		(build-mail-aliases)))))
     (if (stringp vm-mail-header-from)
 	(insert "From: " vm-mail-header-from "\n"))
@@ -1021,13 +815,8 @@
     (and newsgroups (insert "Newsgroups: " newsgroups "\n"))
     (and in-reply-to (insert "In-Reply-To: " in-reply-to "\n"))
     (and references (insert "References: " references "\n"))
-    (insert "X-Mailer: VM " vm-version " under "
-	    (if vm-fsfemacs-19-p "Emacs " "")
-	    emacs-version "\n")
-    ;; REPLYTO environmental variable support
-    ;; note that in FSF Emacs v19.29 we would initialize if the
-    ;; value was t.  nil is the treigger value used now.
-    (and (eq mail-default-reply-to nil)
+    ;; REPLYTO support for FSF Emacs v19.29
+    (and (eq mail-default-reply-to t)
 	 (setq mail-default-reply-to (getenv "REPLYTO")))
     (if mail-default-reply-to
 	(insert "Reply-To: " mail-default-reply-to "\n"))
@@ -1054,8 +843,7 @@
     ;; config stuff will select it as the composition buffer.
     (vm-unbury-buffer (current-buffer))
     ;; make a new frame if the user wants it.
-    (if (and vm-mutable-frames vm-frame-per-composition
-	     (vm-multiple-frames-possible-p))
+    (if (and vm-frame-per-composition (vm-multiple-frames-possible-p))
 	(progn
 	  (vm-goto-new-frame 'composition)
 	  (vm-set-hooks-for-frame-deletion)))
@@ -1078,8 +866,8 @@
 		  vm-send-rfc934-digest-other-frame
 		  vm-send-rfc1153-digest
 		  vm-send-rfc1153-digest-other-frame
-		  vm-send-mime-digest
-		  vm-send-mime-digest-other-frame
+		  vm-send-rfc1521-digest
+		  vm-send-rfc1521-digest-other-frame
 		  vm-forward-message
 		  vm-forward-message-other-frame
 		  vm-forward-message-all-headers
@@ -1214,13 +1002,13 @@
   (if (vm-multiple-frames-possible-p)
       (vm-set-hooks-for-frame-deletion)))
 
-(defun vm-send-mime-digest-other-frame (&optional prefix)
-  "Like vm-send-mime-digest, but run in a newly created frame."
+(defun vm-send-rfc1521-digest-other-frame (&optional prefix)
+  "Like vm-send-rfc1521-digest, but run in a newly created frame."
   (interactive "P")
   (if (vm-multiple-frames-possible-p)
       (vm-goto-new-frame 'composition))
   (let ((vm-frame-per-composition nil)
 	(vm-search-other-frames nil))
-    (vm-send-mime-digest prefix))
+    (vm-send-rfc1153-digest prefix))
   (if (vm-multiple-frames-possible-p)
       (vm-set-hooks-for-frame-deletion)))