トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2021-3-24

Mail.appの添付ファイルをMewで読む


Mewを使ってメールを読んでいると,
macOSのMail.appを使ってる人からの添付ファイルが読めないことがあった.
メール本文を全部保存して対象のMIMEパートを取得,
decodeしてファイルを取り出していたのですが,ちょっと不便.

中身をみてみると,

	boundary="Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C"
--Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C
--Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C
Content-Type: multipart/related; type="text/html"; boundary="Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44"
--Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44
--Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44
--Apple-Mail=_4011702D-3406-4339-AAD5-3772513E8D44--
--Apple-Mail=_126A74B5-1B5D-4DB5-8B6B-2CB862261D4C--

こんな感じで,multipartが階層的になっていた.
階層的なのはいいとして,multipart/relatedというのをMewが解析できてなさそう.

Mew-6.8のコードをみてみると mew-const.el に,

(defconst mew-ct-mla "Multipart/Alternative")

という定義があったので,これを,

(defconst mew-ct-mla "multipart/related")

に変更してみた.
これで,問題のメールの添付ファイルにMewでアクセスできるようになった,
よかった.

"Multipart/Alternative"は同じように扱える方がいいようなあ,と,
mew-ct-mlrという名前で"multipart/related"を定義して,
mew-ct-mlrが使われてるところでパラにできるようにしてみた.
が,これだと上手く動かない...継続調査だなあ.
変更箇所は次の通り.

diff --git a/mew-const.el b/mew-const.el
index ba6e97e..57863e9 100644
--- a/mew-const.el
+++ b/mew-const.el
@@ -108,6 +108,7 @@
 (defconst mew-ct-sts "Message/Delivery-Status")
 (defconst mew-ct-mlm "Multipart/Mixed")
 (defconst mew-ct-mla "Multipart/Alternative")
+(defconst mew-ct-mlr "multipart/related")
 (defconst mew-ct-mls "Multipart/Signed")
 (defconst mew-ct-mle "Multipart/Encrypted")
 (defconst mew-ct-mld "Multipart/Digest")
diff --git a/mew-decode.el b/mew-decode.el
index cc74a74..841281b 100644
--- a/mew-decode.el
+++ b/mew-decode.el
@@ -885,7 +885,7 @@ Return a part syntax after moving the beginning of the content body."
         (boundary (mew-syntax-get-param ctl "boundary"))
         (count 0)
         (parts []) part
-        (use-alt (and (mew-dinfo-get-use-alt) (string= ct mew-ct-mla)))
+        (use-alt (and (mew-dinfo-get-use-alt) (or (string= ct mew-ct-mla) (string= ct mew-ct-mlr))))
         prefpart lastpref lastatpref
         bregex start break)
     (unless boundary
diff --git a/mew-syntax.el b/mew-syntax.el
index 9a6ea2f..6784dbd 100644
--- a/mew-syntax.el
+++ b/mew-syntax.el
@@ -634,7 +634,7 @@ system."
         (cnt mew-syntax-magic)
         (num 1)
         (len (length syntax))
-        (mew-inherit-alt (string= mew-ct-mla ct))
+        (mew-inherit-alt (or (string= mew-ct-mla ct) (string= mew-ct-mlr ct)))
         strpart subsyntax)
     ;; multipart itself is displayed only when encoding.
     (if dec
diff --git a/mew-vars2.el b/mew-vars2.el
index 4f1f5dd..7f13e9f 100644
--- a/mew-vars2.el
+++ b/mew-vars2.el
@@ -213,7 +213,7 @@ for privacy reasons.")
       (mew-case-equal ct mew-ct-msg))) ;; xxx mew-ct-messagep?
 
 (defvar mew-mime-content-type-multipart-list
-  `(,mew-ct-mlm ,mew-ct-mla)
+  `(,mew-ct-mlm ,mew-ct-mlr)
   "Candidate of 'Content-Type: Multipart/' when CT: is changed
 in draft buffer.")