X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/265f03bcb26a1388a913f38da830c93f99ec6c35..6e66e4c6fc350fe8cb85d4cc35d9ca567df56548:/lisp/mail/sendmail.el diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 4f74cb59fa..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)) @@ -716,7 +733,7 @@ the user from the mailer." 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 @@ -727,7 +744,7 @@ 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