X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/da241b5c3c830632c3e83426ffcd9ad9dfe2b01e..6e66e4c6fc350fe8cb85d4cc35d9ca567df56548:/lisp/mail/sendmail.el diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index c5ebe29791..e4da1dcddb 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -43,12 +43,29 @@ If `parens', they look like: king@grassland.com (Elvis Parsley) If `angles', they look like: Elvis Parsley -If `system-default', Rmail allows the system to insert its default From field." +If `system-default', allows the mailer to insert its default From field +derived from the envelope-from address. + +In old versions of Emacs, the `system-default' setting also caused +Emacs to pass the proper email address from `user-mail-address' +to the mailer to specify the envelope-from address. But that is now +controlled by a separate variable, `mail-specify-envelope-from'." :type '(choice (const nil) (const parens) (const angles) (const system-default)) :version "20.3" :group 'sendmail) +;;;###autoload +(defcustom mail-specify-envelope-from t + "*If non-nil, specify the envelope-from address when sending mail. +The value used to specify it is whatever is found in `user-mail-address'. + +On most systems, specifying the envelope-from address +is a privileged operation." + :version "21.1" + :type 'boolean + :group 'sendmail) + ;;;###autoload (defcustom mail-self-blind nil "\ *Non-nil means insert BCC to self in messages to be sent. @@ -453,7 +470,7 @@ Here are commands that move to a header field (and create it if there isn't): ;; Lines containing just >= 3 dashes, perhaps after whitespace, ;; are also sometimes used and should be separators. (setq paragraph-start (concat (regexp-quote mail-header-separator) - "$\\|[ \t]*\\([-|#;>*]+ *\\|(?[0-9]+[.)] *\\)*$" + "$\\|\t*\\([-|#;>* ]\\|(?[0-9]+[.)]\\)+$" "\\|[ \t]*[a-z0-9A-Z]*>+[ \t]*$\\|[ \t]*$\\|" "-- $\\|---+$\\|" page-delimiter)) @@ -701,7 +718,7 @@ the user from the mailer." (error)) (setq mail-send-actions (cdr mail-send-actions))) (message "Sending...done") - ;; If buffer has no file, mark it as unmodified and delete autosave. + ;; If buffer has no file, mark it as unmodified and delete auto-save. (if (not buffer-file-name) (progn (set-buffer-modified-p nil) @@ -713,21 +730,21 @@ the user from the mailer." ;;;###autoload (defvar sendmail-coding-system nil "*Coding system for encoding the outgoing mail. -This has higher priority than `defualt-buffer-file-coding-system' +This has higher priority than `default-buffer-file-coding-system' and `default-sendmail-coding-system', but lower priority than the local value of `buffer-file-coding-system'. -See also the function `select-sendmail-coding-system'.") +See also the function `select-message-coding-system'.") ;;;###autoload (defvar default-sendmail-coding-system 'iso-latin-1 - "Default coding system for encodihng the outgoing mail. + "Default coding system for encoding the outgoing mail. This variable is used only when `sendmail-coding-system' is nil. This variable is set/changed by the command set-language-environment. User should not set this variable manually, instead use sendmail-coding-system to get a constant encoding of outgoing mails regardless of the current language environment. -See also the function `select-sendmail-coding-system'.") +See also the function `select-message-coding-system'.") (defun sendmail-send-it () (require 'mail-utils) @@ -860,7 +877,7 @@ See also the function `select-sendmail-coding-system'.") (insert "From: " login "\n")) ((eq mail-from-style 'system-default) nil) - (t (error "Invalid value for `system-default'"))))) + (t (error "Invalid value for `mail-from-style'"))))) ;; Insert an extra newline if we need it to work around ;; Sun's bug that swallows newlines. (goto-char (1+ delimline)) @@ -881,38 +898,38 @@ See also the function `select-sendmail-coding-system'.") (re-search-forward "^To:\\|^cc:\\|^bcc:\\|^resent-to:\ \\|^resent-cc:\\|^resent-bcc:" delimline t)) - (let ((default-directory "/") - (coding-system-for-write (select-message-coding-system))) - (apply 'call-process-region - (append (list (point-min) (point-max) - (if (boundp 'sendmail-program) - sendmail-program - "/usr/lib/sendmail") - nil errbuf nil "-oi") - ;; Always specify who from, - ;; since some systems have broken sendmails. - ;; unless user has said no. - (if (memq mail-from-style '(angles parens nil)) + (let* ((default-directory "/") + (coding-system-for-write (select-message-coding-system)) + (args + (append (list (point-min) (point-max) + (if (boundp 'sendmail-program) + sendmail-program + "/usr/lib/sendmail") + nil errbuf nil "-oi") + (and mail-specify-envelope-from (list "-f" user-mail-address)) -;;; ;; Don't say "from root" if running under su. -;;; (and (equal (user-real-login-name) "root") -;;; (list "-f" (user-login-name))) - (and mail-alias-file - (list (concat "-oA" mail-alias-file))) - (if mail-interactive - ;; These mean "report errors to terminal" - ;; and "deliver interactively" - '("-oep" "-odi") - ;; These mean "report errors by mail" - ;; and "deliver in background". - '("-oem" "-odb")) - ;; Get the addresses from the message - ;; unless this is a resend. - ;; We must not do that for a resend - ;; because we would find the original addresses. - ;; For a resend, include the specific addresses. - (or resend-to-addresses - '("-t"))))) +;;; ;; Don't say "from root" if running under su. +;;; (and (equal (user-real-login-name) "root") +;;; (list "-f" (user-login-name))) + (and mail-alias-file + (list (concat "-oA" mail-alias-file))) + (if mail-interactive + ;; These mean "report errors to terminal" + ;; and "deliver interactively" + '("-oep" "-odi") + ;; These mean "report errors by mail" + ;; and "deliver in background". + '("-oem" "-odb")) + ;; Get the addresses from the message + ;; unless this is a resend. + ;; We must not do that for a resend + ;; because we would find the original addresses. + ;; For a resend, include the specific addresses. + (or resend-to-addresses + '("-t")))) + (exit-value (apply 'call-process-region args))) + (or (null exit-value) (zerop exit-value) + (error "Sending...failed with exit value %d" exit-value))) (or fcc-was-found (error "No recipients"))) (if mail-interactive @@ -1055,7 +1072,7 @@ See also the function `select-sendmail-coding-system'.") (interactive) (save-excursion ;; put a marker at the end of the header - (let ((end (make-marker (mail-header-end))) + (let ((end (copy-marker (mail-header-end))) (case-fold-search t) to-line) (goto-char (point-min)) @@ -1201,7 +1218,8 @@ and don't delete any header fields." ;; delete that window to save screen space. ;; t means don't alter other frames. (delete-windows-on original t) - (insert-buffer original)) + (insert-buffer original) + (set-text-properties (point) (mark t) nil)) (if (consp arg) nil (goto-char start) @@ -1262,6 +1280,9 @@ and don't delete any header fields." (interactive "P") (and (consp mail-reply-action) (eq (car mail-reply-action) 'insert-buffer) + (with-current-buffer (nth 1 mail-reply-action) + (or (mark t) + (error "No mark set: %S" (current-buffer)))) (let ((buffer (nth 1 mail-reply-action)) (start (point)) ;; Avoid error in Transient Mark mode