Ответ 1
;; 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-выражение.
- Если задан как символ, он запускается, когда лямбда-функция добавляется к
message-setup-hook
. Это происходит вmessage-mode-hook
, т.е. Сразу после создания нового буфера и переключения наmessage-mode
. Причиной для этого является некоторая дикая цитата/нечеткость значений во время создания лямбда-функции. - Если задано как цитируемое 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))