From 57515fff34cf8ff184912853663043400d8f9995 Mon Sep 17 00:00:00 2001 From: Daniel Borchmann Date: Sun, 6 Dec 2020 09:15:37 +0100 Subject: [PATCH] Restructure Gnus' MIME configuration Let's group configuration related to MIME decoding and MIME encoding, to better understand what these variables are actually doing and to decrease maintanence complexity. --- init.el | 162 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 84 insertions(+), 78 deletions(-) diff --git a/init.el b/init.el index 7a42a99..3607ac8 100644 --- a/init.el +++ b/init.el @@ -1604,6 +1604,13 @@ gnus-treat-emphasize 'head gnus-treat-unsplit-urls t) +(use-package gnus-art + :init (setq gnus-ignored-mime-types '("text/x-vcard") + gnus-inhibit-mime-unbuttonizing nil + gnus-buttonized-mime-types '("multipart/signed" "multipart/encrypted") + gnus-inhibit-images t + gnus-blocked-images ".*")) + ;; Adaptive Scoring (setq gnus-use-scoring t @@ -1639,24 +1646,84 @@ emacs-d) gnus-refer-article-method 'current) -;; MIME +;; MIME decoding -(setq gnus-ignored-mime-types '("text/x-vcard") - message-forward-as-mime t - gnus-inhibit-mime-unbuttonizing nil - gnus-buttonized-mime-types '("multipart/signed" "multipart/encrypted") - gnus-inhibit-images t - gnus-blocked-images "." - mm-text-html-renderer 'shr - mm-discouraged-alternatives '("text/richtext")) +(use-package mm-decode + :init (setq mm-text-html-renderer 'shr + mm-discouraged-alternatives '("text/richtext") + mm-decrypt-option 'known + mm-verify-option 'known) + :config (progn + (setq mm-automatic-display (-difference mm-automatic-display + '("text/enriched" + "text/richtext"))) -;; Signing and Encryption + ;; Automatically show PGP data inline + (add-to-list 'mm-inlined-types "application/pgp$") + (add-to-list 'mm-inline-media-tests + '("application/pgp$" mm-inline-text identity)) + (add-to-list 'mm-automatic-display "application/pgp$"))) -(setq mm-encrypt-option nil - mm-sign-option nil - mm-decrypt-option 'known - mm-verify-option 'known - mml-smime-use 'epg +(use-package mm-view + :config (progn + ;; Fix: mm-view does not seem to support verifying S/MIME messages + ;; using gpgsm, so we add a simple fix here + + (defun mm-view-pkcs7-verify (handle) + (let ((verified nil)) + (with-temp-buffer + (if (eq mml-smime-use 'epg) + ;; Use gpgsm + (progn + (insert-buffer-substring (mm-handle-buffer handle)) + (setq verified (epg-verify-string (epg-make-context 'CMS) + (base64-decode-string (buffer-string))))) + ;; FIXME: insert valid signature + ;; use openssl + (progn + (insert "MIME-Version: 1.0\n") + (mm-insert-headers "application/pkcs7-mime" "base64" "smime.p7m") + (insert-buffer-substring (mm-handle-buffer handle)) + (setq verified (smime-verify-region (point-min) (point-max)))))) + (goto-char (point-min)) + (mm-insert-part handle) + (if (search-forward "Content-Type: " nil t) + (delete-region (point-min) (match-beginning 0))) + (goto-char (point-max)) + (if (re-search-backward "--\r?\n?" nil t) + (delete-region (match-end 0) (point-max))) + (unless verified + (insert-buffer-substring smime-details-buffer))) + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n")) + t))) + +(setq message-forward-as-mime t) + +;; MIME creation; signing, and encryption + +(use-package mml + :config (progn + ;; Move to end of message buffer before attaching a file + ;; http://mbork.pl/2015-11-28_Fixing_mml-attach-file_using_advice + + (defun db/mml-attach-file--go-to-eob (orig-fun &rest args) + "Go to the end of buffer before attaching files." + (save-excursion + (save-restriction + (widen) + (goto-char (point-max)) + (apply orig-fun args)))) + + (advice-add 'mml-attach-file + :around #'db/mml-attach-file--go-to-eob))) + +(use-package mm-encode + :init (setq mm-encrypt-option nil + mm-sign-option nil)) + +(setq mml-smime-use 'epg ;;mml2015-encrypt-to-self t mml2015-display-key-image nil gnus-message-replysign t @@ -1786,71 +1853,10 @@ (bind-key "C-" #'db/gnus-summary-open-Link gnus-summary-mode-map) (bind-key "C-" #'db/gnus-summary-open-Link gnus-article-mode-map))) -(use-package mm-decode - :config (progn - (setq mm-automatic-display (-difference mm-automatic-display - '("text/enriched" - "text/richtext"))) - ;; Automatically show PGP data inline - (add-to-list 'mm-inlined-types "application/pgp$") - (add-to-list 'mm-inline-media-tests - '("application/pgp$" mm-inline-text identity)) - (add-to-list 'mm-automatic-display "application/pgp$"))) +;; Sending mail -(use-package mm-view - :config (progn - ;; Fix: mm-view does not seem to support verifying S/MIME messages - ;; using gpgsm, so we add a simple fix here - - (defun mm-view-pkcs7-verify (handle) - (let ((verified nil)) - (with-temp-buffer - (if (eq mml-smime-use 'epg) - ;; Use gpgsm - (progn - (insert-buffer-substring (mm-handle-buffer handle)) - (setq verified (epg-verify-string (epg-make-context 'CMS) - (base64-decode-string (buffer-string))))) - ;; FIXME: insert valid signature - ;; use openssl - (progn - (insert "MIME-Version: 1.0\n") - (mm-insert-headers "application/pkcs7-mime" "base64" "smime.p7m") - (insert-buffer-substring (mm-handle-buffer handle)) - (setq verified (smime-verify-region (point-min) (point-max)))))) - (goto-char (point-min)) - (mm-insert-part handle) - (if (search-forward "Content-Type: " nil t) - (delete-region (point-min) (match-beginning 0))) - (goto-char (point-max)) - (if (re-search-backward "--\r?\n?" nil t) - (delete-region (match-end 0) (point-max))) - (unless verified - (insert-buffer-substring smime-details-buffer))) - (goto-char (point-min)) - (while (search-forward "\r\n" nil t) - (replace-match "\n")) - t))) - -(use-package mml - :config (progn - ;; Move to end of message buffer before attaching a file - ;; http://mbork.pl/2015-11-28_Fixing_mml-attach-file_using_advice - - (defun db/mml-attach-file--go-to-eob (orig-fun &rest args) - "Go to the end of buffer before attaching files." - (save-excursion - (save-restriction - (widen) - (goto-char (point-max)) - (apply orig-fun args)))) - - (advice-add 'mml-attach-file - :around #'db/mml-attach-file--go-to-eob))) - -(setq notmuch-fcc-dirs nil - message-send-mail-function #'db/smtpmail-send-it +(setq message-send-mail-function #'db/smtpmail-send-it send-mail-function #'db/smtpmail-send-it mail-user-agent 'gnus-user-agent)