;; Make sure the Message-ID header is present in newly created messages
(setq message-generate-headers-first '(Message-ID))
;; Prevent emacs from resetting the Message-ID before the message is sent.
(setq message-deletable-headers
(remove 'Message-ID message-deletable-headers))
(setq gnus-posting-styles
'(("^pl\\.test$"
("Reply-To" '(message-make-reply-to)))))
请注意 . 周围的附加引号和括号message-make-reply-to
。对此的解释是该函数在不同时间运行,具体取决于它是作为符号给出还是作为带引号的 s 表达式给出。
- 如果作为符号给出,它将在 lambda 函数添加到时运行
message-setup-hook
。这发生在 a 中message-mode-hook
,即在新缓冲区创建并切换到 之后message-mode
。造成这种情况的原因是在创建 lambda 函数期间对值进行了一些疯狂的引用/取消引用。
- 如果作为引用的 sexpr 给出,则评估将延迟到缓冲区充满初始值之后。它接近在消息设置上运行的最后一个代码。
替代解决方案(不带gnus-posting-styles
)
如果应将新标头添加到每条新消息,Reply-To
标头也可以使用message-header-setup-hook
. 需要定义一个自定义挂钩来为每条新消息添加标头。
(defun reply-to-message-header-setup-hook ()
(let* ((msg-id (message-fetch-field "Message-ID"))
(reply-to (my-script ".../reply-to-pl" msg-id)))
(message-add-header (concat "Reply-To: " reply-to))))
;; Call the hook every time a new message is created
(add-hook 'message-header-setup-hook 'reply-to-message-header-setup-hook)
;; Make sure the Message-ID header is present in newly created messages
(setq message-generate-headers-first '(Message-ID))