From d16957dc970471c9d46d94a34b94058871465755 Mon Sep 17 00:00:00 2001 From: Jun Hao Date: Sat, 16 Apr 2016 23:13:47 +0800 Subject: [PATCH] mu4e: handle attached image when write msg body to html --- mu4e/mu4e-actions.el | 19 +++++++++++++++++-- mu4e/mu4e-utils.el | 9 +++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/mu4e/mu4e-actions.el b/mu4e/mu4e-actions.el index d67b6a7e..7f145a14 100644 --- a/mu4e/mu4e-actions.el +++ b/mu4e/mu4e-actions.el @@ -74,14 +74,29 @@ Works for the message view." "Write the body (either html or text) to a temporary file; return the filename." (let* ((html (mu4e-message-field msg :body-html)) - (txt (mu4e-message-field msg :body-txt)) - (tmpfile (mu4e-make-temp-file "html"))) + (txt (mu4e-message-field msg :body-txt)) + (tmpfile (mu4e-make-temp-file "html")) + (attachments (remove-if (lambda (part) + (or (null (plist-get part :attachment)) + (null (plist-get part :cid)))) + (mu4e-message-field msg :parts)))) (unless (or html txt) (mu4e-error "No body part for this message")) (with-temp-buffer (insert "\n") (insert (or html (concat "
" txt "
"))) (write-file tmpfile) + ;; rewrite attachment urls + (mapc (lambda (attachment) + (goto-char (point-min)) + (while (re-search-forward (format "src=\"cid:%s\"" (plist-get attachment :cid)) nil t) + (if (plist-get attachment :temp) + (replace-match (format "src=\"%s\"" (plist-get attachment :temp))) + (replace-match (format "src=\"%s%s\"" temporary-file-directory (plist-get attachment :name))) + (mu4e~proc-extract 'save (mu4e-message-field :docid) (plist-get attachment :index) mu4e-decryption-policy temporary-file-directory) + (mu4e-remove-file-later (format "%s%s" temporary-file-directory (plist-get attachment :name)))))) + attachments) + (save-buffer) tmpfile))) (defun mu4e-action-view-in-browser (msg) diff --git a/mu4e/mu4e-utils.el b/mu4e/mu4e-utils.el index 817b6c95..1f8c9c08 100644 --- a/mu4e/mu4e-utils.el +++ b/mu4e/mu4e-utils.el @@ -139,6 +139,12 @@ return the result." (mu4e~get-folder 'mu4e-trash-folder msg)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defun mu4e-remove-file-later (filename) + "Remove FILENAME in a few seconds." + (run-at-time "10 sec" nil + (lambda () (ignore-errors (delete-file filename))))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun mu4e-make-temp-file (ext) @@ -146,8 +152,7 @@ return the result." self-destruct in a few seconds, enough to open it in another program." (let ((tmpfile (make-temp-file "mu4e-" nil (concat "." ext)))) - (run-at-time "10 sec" nil - (lambda (fname) (ignore-errors (delete-file fname))) tmpfile) + (mu4e-remove-file-later tmpfile) tmpfile)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;