Emacs Message: сохранение отправленных писем

Emacs Message: сохранение отправленных писем

Как заставить Emacs Message ( C-x m) сохранять исходящие письма?

Есть ли стандартный способ сделать это?

Конечно, можно C-x C-s, но это неэффективно и легко забывается, кроме того, вы не можете быть на 100% уверены, что письмо действительно отправлено: вы могли внести какие-то изменения в последнюю минуту, о которых позже забыли.

Можно ли вызвать этот ( save-buffer) из хука «отправить сообщение» и автоматизировать его? (Например text-mode-hook.) Если да, то какой хук? (Как получить хуки режима?)

BCCпро себя: не очень элегантно?

FCC: кажется, это лучшее решение, однако его необходимо автоматизировать, как вызов, так и сгенерировать хорошее имя файла.

решение1

Только что заставил это работать. Введите .emacs:

(defun save-sent-mail ()
  (write-file (format-time-string "~/Mail/sent/%Y-%m-%d_%T") nil) )
(add-hook 'message-send-hook 'save-sent-mail)

решение2

gcc-selfВы можете задать переменную Tдля любых групп, которые хотите архивировать.

См. документацию здесь. (или (gnus) Group Parameters)

EDIT: gcc-selfэто не «классическая» переменная, ее нужно устанавливать через gnus-parameter.

(setq gnus-parameters
      '((".*"
         (gcc-self . t))))

решение3

Я использую более сложное решение:

(defconst my-safe-filename-char-regex "[[:alnum:]-_!.@]"
  «Безопасные имена файлов».)

(defun my-clean-filename (имя_файла)
  (mapconcat
   (лямбда (ch) (или (когда (строка-соответствует моему-безопасному-имя-файла-char-regex (символ-в-строку ch)) (символ-в-строку ch)) "-"))
   имя файла "") )

(defun my-message-save())
  «Сохранить сообщение в `gnus-article-save-directory' после
успешной отправки. Возможно, что почта отклонена и я потерял
это полностью, эта функция сохрани ее для меня."
  (если только (eq major-mode 'message-mode)
    (ошибка "Попытка вызвать my-message-save в буфере, отличном от режима сообщений"))
  (make-directory gnus-article-save-directory t)
  (пусть ((буф (текущий-буфер))
         (field-to (my-clean-filename (или (message-fetch-field "Newsgroups") (message-fetch-field "To"))))
         (field-subject (my-clean-filename (message-fetch-field "Subject")))
         файл )
    (setq file (concat gnus-article-save-directory "/" (format-time-string "%F_%T") "_" field-to "_" field-subject))
    (с файлом-temp-file
      (вставить-буфер buf)
      )))
(add-hook 'message-sent-hook 'my-message-save)

Также обратите внимание, что я используюсообщение-отправлено-крючоквместосообщение-отправить-крючок.

Связанный контент