Threading of forwarded messages

Örjan Ekeberg ekeberg at
Wed Jan 23 15:28:34 PST 2019

Tomi Ollila <tomi.ollila at> writes:
> notmuch-mua-new-forward-messages would be the place adding message-id's
> to the references header (perhaps where 'appropriate subject' is added)
> probably not much work but SMOP anyway ;/

Indeed.  Here is an attempt that seems to do the trick.
This is a modified version of notmuch-mua-new-forward-messages
(extracted from notmuch-mua-el).  Sorry for not posting it as a patch.
Changes are the lines involving the variable forward-references.
Please check if this is the right approach.

(defun notmuch-mua-new-forward-messages (messages &optional prompt-for-sender)
  "Compose a new message forwarding MESSAGES.

If PROMPT-FOR-SENDER is non-nil, the user will be prompteed for
the From: address."
  (let* ((other-headers
	  (when (or prompt-for-sender notmuch-always-prompt-for-sender)
	    (list (cons 'From (notmuch-mua-prompt-for-sender)))))
	 forward-subject  ;; Comes from the first message and is
			  ;; applied later.
	 forward-references) ;; Accumulated message-ids of forwarded messages

    ;; Generate the template for the outgoing message.
    (notmuch-mua-mail nil "" other-headers nil (notmuch-mua-get-switch-function))

      ;; Insert all of the forwarded messages.
      (mapc (lambda (id)
	      (let ((temp-buffer (get-buffer-create
				  (concat "*notmuch-fwd-raw-" id "*"))))
		;; Get the raw version of this message in the buffer.
		(with-current-buffer temp-buffer
		  (let ((coding-system-for-read 'no-conversion))
		    (call-process notmuch-command nil t nil "show" "--format=raw" id))
		  ;; Because we process the messages in reverse order,
		  ;; always generate a forwarded subject, then use the
		  ;; last (i.e. first) one.
		  (setq forward-subject (message-make-forward-subject))
		  (if forward-references
		      (setq forward-references
			    (concat forward-references ", "
				    (message-fetch-field "Message-ID")))
		    (setq forward-references (message-fetch-field "Message-ID"))))
		;; Make a copy ready to be forwarded in the
		;; composition buffer.
		(message-forward-make-body temp-buffer)
		;; Kill the temporary buffer.
		(kill-buffer temp-buffer)))
	    ;; `message-forward-make-body' always puts the message at
	    ;; the top, so do them in reverse order.
	    (reverse messages))

      ;; Add in the appropriate subject.
	(message-remove-header "Subject")
	(message-add-header (concat "Subject: " forward-subject))
	(message-remove-header "References")
	(message-add-header (concat "References: " forward-references)))

      ;; `message-forward-make-body' shows the User-agent header.  Hide
      ;; it again.
      (set-buffer-modified-p nil))))

More information about the notmuch mailing list