From a3b24bbc6a738e60bc74df3d10822161d742d417 Mon Sep 17 00:00:00 2001 From: Jeremy Compostella Date: Tue, 21 Jan 2020 15:41:22 -0700 Subject: [PATCH] Expand text/html regardless of its position in the MIME tree If the text/html part is not the unique part of the email, mml-generate-mime does not expand it to a related multipart. This break uses cases like PGP signing of an HTML email including images. For instance, if you compose an email with the <#multipart sign=pgpmime> and a <#part type="text/html" disposition=inline>, the second part is not expanded into a multipart related and the images are not included. Signed-off-by: Jeremy Compostella --- lisp/gnus/mml.el | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el index cdd8f3d3a5..3d86c5bc40 100644 --- a/lisp/gnus/mml.el +++ b/lisp/gnus/mml.el @@ -487,11 +487,8 @@ type detected." (= (length cont) 1) content-type) (setcdr (assq 'type (cdr (car cont))) content-type)) - (when (and (consp (car cont)) - (= (length cont) 1) - (fboundp 'libxml-parse-html-region) - (equal (cdr (assq 'type (car cont))) "text/html")) - (setq cont (mml-expand-html-into-multipart-related (car cont)))) + (when (fboundp 'libxml-parse-html-region) + (setq cont (mapcar 'mml-expand-all-html-into-multipart-related cont))) (prog1 (with-temp-buffer (set-buffer-multibyte nil) @@ -510,6 +507,18 @@ type detected." (buffer-string)) (setq message-options options))))) +(defun mml-expand-all-html-into-multipart-related (cont) + (cond ((and (eq (car cont) 'part) + (equal (cdr (assq 'type cont)) "text/html")) + (mml-expand-html-into-multipart-related cont)) + ((eq (car cont) 'multipart) + (let ((cur (cdr cont))) + (while (consp cur) + (setcar cur (mml-expand-all-html-into-multipart-related (car cur))) + (setf cur (cdr cur)))) + cont) + (t cont))) + (defun mml-expand-html-into-multipart-related (cont) (let ((new-parts nil) (cid 1)) -- 2.24.1