トップ 一覧 Farm 検索 ヘルプ 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.")