Как создать динамический "Reply-To:" на основе "Message-ID:"? [+ Подробнее]

Как вы можете сгенерировать динамический заголовок "Reply-To:" (и "From:") в emacs/gnus на основе Message-ID созданного сообщения? Я хотел бы использовать внешний (Perl) скрипт для генерации динамического +detail часть, основанная на заголовке "Messaged-ID:".

user+detail@example.net

Мне удалось создать заголовок с контентом, сгенерированным моим внешним скриптом. Сценарий получает имя группы usenet в качестве параметра командной строки. Я также хотел бы передать ему значение идентификатора сообщения.

Мой текущий код
~ /.emacs:

'(gnus-posting-styles ("^pl\\.test$" ("Reply-To" message-make-reply-to)))

~ /.Gnus

(defun message-make-reply-to()
  (my-script ".../reply-to.pl" (message-fetch-field "Message-Id")))

(defun my-script(path &optional param) ....

Проблема: скрипт не получает идентификатор сообщения в качестве своего параметра (my-script получает правильно заданный параметр)

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))
Другие вопросы по тегам