changeset 74158:07973a5d9639

(smtpmail-send-it): Copy buffer-file-coding-system from the mail buffer. Possibly add a MIME header for the message encoding. Bind coding-system-for-write around the call to mail-do-fcc. Use smtpmail-code-conv-from to encode queued mail messages.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 24 Nov 2006 14:32:19 +0000
parents e56f52b00e2d
children 00ca14dca743
files lisp/mail/smtpmail.el
diffstat 1 files changed, 26 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/smtpmail.el	Fri Nov 24 11:22:05 2006 +0000
+++ b/lisp/mail/smtpmail.el	Fri Nov 24 14:32:19 2006 +0000
@@ -244,6 +244,11 @@
 	(save-excursion
 	  (set-buffer tembuf)
 	  (erase-buffer)
+	  ;; Use the same buffer-file-coding-system as in the mail
+	  ;; buffer, otherwise any write-region invocations (e.g., in
+	  ;; mail-do-fcc below) will annoy with asking for a suitable
+	  ;; encoding.
+	  (set-buffer-file-coding-system smtpmail-code-conv-from nil t)
 	  (insert-buffer-substring mailbuf)
 	  (goto-char (point-max))
 	  ;; require one newline at the end.
@@ -326,6 +331,22 @@
 	    (goto-char (point-min))
 	    (unless (re-search-forward "^Date:" delimline t)
 	      (insert "Date: " (message-make-date) "\n"))
+	    ;; Possibly add a MIME header for the current coding system
+	    (let (charset)
+	      (goto-char (point-min))
+	      (and (eq mail-send-nonascii 'mime)
+		   (not (re-search-forward "^MIME-version:" delimline t))
+		   (progn (skip-chars-forward "\0-\177")
+			  (/= (point) (point-max)))
+		   smtpmail-code-conv-from
+		   (setq charset
+			 (coding-system-get smtpmail-code-conv-from
+					    'mime-charset))
+		   (goto-char delimline)
+		   (insert "MIME-version: 1.0\n"
+			   "Content-type: text/plain; charset="
+			   (symbol-name charset)
+			   "\nContent-Transfer-Encoding: 8bit\n")))
 	    ;; Insert an extra newline if we need it to work around
 	    ;; Sun's bug that swallows newlines.
 	    (goto-char (1+ delimline))
@@ -334,7 +355,10 @@
 	    ;; Find and handle any FCC fields.
 	    (goto-char (point-min))
 	    (if (re-search-forward "^FCC:" delimline t)
-		(mail-do-fcc delimline))
+		;; Force mail-do-fcc to use the encoding of the mail
+		;; buffer to encode outgoing messages on FCC files.
+		(let ((coding-system-for-write smtpmail-code-conv-from))
+		  (mail-do-fcc delimline)))
 	    (if mail-interactive
 		(with-current-buffer errbuf
 		  (erase-buffer))))
@@ -370,6 +394,7 @@
 		(make-directory smtpmail-queue-dir t))
 	      (with-current-buffer buffer-data
 		(erase-buffer)
+		(set-buffer-file-coding-system smtpmail-code-conv-from nil t)
 		(insert-buffer-substring tembuf)
 		(write-file file-data)
 		(set-buffer buffer-elisp)