Function: message-mail

message-mail is an autoloaded, interactive and byte-compiled function defined in message.el.gz.

Signature

(message-mail &optional TO SUBJECT OTHER-HEADERS CONTINUE SWITCH-FUNCTION YANK-ACTION SEND-ACTIONS RETURN-ACTION &rest _)

Documentation

Start editing a mail message to be sent.

OTHER-HEADERS is an alist of header/value pairs. CONTINUE says whether to continue editing a message already being composed. SWITCH-FUNCTION is a function used to switch to and display the mail buffer.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/message.el.gz
;;;
;;; Commands for interfacing with message
;;;

;;;###autoload
(defun message-mail (&optional to subject other-headers continue
			       switch-function yank-action send-actions
			       return-action &rest _)
  "Start editing a mail message to be sent.
OTHER-HEADERS is an alist of header/value pairs.  CONTINUE says whether
to continue editing a message already being composed.  SWITCH-FUNCTION
is a function used to switch to and display the mail buffer."
  (interactive)
  (let ((message-this-is-mail t)
	message-buffers)
    ;; Search for the existing message buffer if `continue' is non-nil.
    (if (and continue
	     (setq message-buffers (message-buffers)))
	(pop-to-buffer (car message-buffers))
      ;; Start a new buffer.
      (unless (message-mail-user-agent)
	(message-pop-to-buffer (message-buffer-name "mail" to) switch-function))
      (message-setup
       (nconc
	`((To . ,(or to "")) (Subject . ,(or subject "")))
	;; C-h f compose-mail says that headers should be specified as
	;; (string . value); however all the rest of message expects
	;; headers to be symbols, not strings (eg message-header-format-alist).
	;; https://lists.gnu.org/r/emacs-devel/2011-01/msg00337.html
	;; We need to convert any string input, eg from rmail-start-mail.
	(dolist (h other-headers other-headers)
	  (when (stringp (car h))
            (setcar h (intern (capitalize (car h)))))
          ;; Firefox sends us In-Reply-To headers that are Message-IDs
          ;; without <> around them.  Fix that.
          (when (and (eq (car h) 'In-Reply-To)
                     (stringp (cdr h))
                     ;; Looks like a Message-ID.
                     (string-match-p "\\`[^ @]+@[^ @]+\\'" (cdr h))
                     (not (string-match-p "\\`<.*>\\'" (cdr h))))
            (setcdr h (concat "<" (cdr h) ">")))))
       yank-action send-actions continue switch-function
       return-action))))