An issue has been identified with this patch for which I wrote a fix. I ran many tests and combination with this additional patch (see attachement) and I could not find any issue left. The reason I missed this obvious bug was my configuration using my `org-msg' module which has an advice on `mml-expand-html-into-multipart-related' to workaround the limitation that my previous patch addresses. The issue originates from the fact that the `mml-expand-html-into-multipart-related' function returns a list of list for an untouched part while it returns a simple list for expanded multipart. The recursive engine of `mml-expand-all-html-into-multipart-related' is not handling this. Considering that the `mml-expand-html-into-multipart-related' function is only used by mml as an internal function, IMO the best approach is to make it consistent on its potential return values structure. The patch I am submitting here makes `mml-expand-html-into-multipart-related' returns a simple list regardless of if it is a part or a multipart. On Wed, Feb 12, 2020 at 11:18 AM Jérémy Compostella wrote: > > Hi, > > I would really appreciate if I could receive a feedback on this patch. I can't send GPG HTML email because of this limitation and this is is also blocking an issue reported of my org-msg module. > > I have attached the patch here as I have fixed a typo in the commit headline. > > Let me know if I need to address this patch to another mailing list. > > Regards, > Jeremy > . > > On Tue, Jan 21, 2020 at 4:01 PM Jeremy Compostella wrote: >> >> 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 >> and a , 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 >> > > > -- > « Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter » - Edsger Dijkstra -- « Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter » - Edsger Dijkstra