# HG changeset patch # User Eli Zaretskii # Date 1164378739 0 # Node ID 07973a5d96397b589740a2e74fec75117aa0fe9b # Parent e56f52b00e2d162e4ea53fb3837794e6ba03e2a9 (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. diff -r e56f52b00e2d -r 07973a5d9639 lisp/mail/smtpmail.el --- 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)