Skip to content

[che-apple-mail-mcp] archive-mail 未下載附件(僅記錄檔名) #23

Description

@kiki830621

Problem

使用者原文(2026-04-14 對話中發現):
「archive mail沒有順便把附件抓下來嗎?」

現有 commands/archive-mail.md 的 Step 5 生成 Markdown 時,只把附件檔名寫進 Markdown 正文(例如 Attachments: Taxometric_Analysis_Submission_v3_20260408.docx, Figures & Tables20260408.docx),沒有實際下載附件到本地磁碟。

2026-04-08 歸檔的 Tatsuma 信件即為例證:communications/2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1.md 原本最後一行只有檔名字串,原始 .docx 仍停留在 Apple Mail.app 內部儲存區;使用者若日後要存取,必須手動從 Mail 取出。

MCP server 本身附件能力但 command 完全沒用:

  • mcp__plugin_che-apple-mail-mcp_mail__list_attachments
  • mcp__plugin_che-apple-mail-mcp_mail__list_attachments_batch
  • mcp__plugin_che-apple-mail-mcp_mail__save_attachment

Type

feature

Baseline from manual backfill (2026-04-14)

2026-04-14 session 已在 tatsuma 專案手動實作整套 pattern 一次,驗證 7 個附件、3 個 email、跨 thread 2 週時間範圍。commits: bcac7ee (init), 784eac6 (backfill)。以下是已驗證可行的約定,正式實作時應直接採用:

1. 目錄結構(確定)

{output_dir}/attachments/{主郵件 markdown stem}/{原檔名}

其中 markdown stem 是主信歸檔 md 的檔名去掉 .md。例如:

主信 md 附件目錄
2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1.md attachments/2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1/
2026-03-17_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-Ab.md attachments/2026-03-17_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-Ab/

好處:一對一對應、可 ls 查找、支援回填(md 已存在、附件後補)。

2. 檔名保留原始(確定)

附件檔名#16 的 subject hyphenation rule,保留原始 bytes(含空白、&、中日文、emoji)。磁碟 I/O 用原字串寫入,在 Markdown link URL 才做 URL encoding。

3. URL encoding(確定)

Markdown 的 [label](url) 裡只需要處理:

  • 空白 → %20
  • &%26
  • 其他一律保留(中日文 Unicode 不動,GitHub/VS Code 都能 render)

顯示文字([label])保留原檔名完整可讀。範例:

- [Figures & Tables20260408.docx](attachments/2026-04-08_.../Figures%20%26%20Tables20260408.docx) (93 KB)

4. Attachments 區塊在 md 中的位置(確定)

原信簽名結束後(例如 Tatsuma 的 ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ 分隔線之後),引用 thread history(差出人: / 寄件者: 段落)之前。這樣邏輯上屬於「這封信」而非被混到 thread quote 裡。

... Tatsuma's body ...
Kind regards,
Tatsuma
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
... signature ...
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞

Attachments:
- [file1](...) (146 KB)
- [file2](...) (93 KB)

差出人: Lay, Keng-Ling <kllay@ntu.edu.tw>
... thread history ...

5. 回信無附件時的處理(確定)

回信引用原信時,原信的附件標記(例如 <Taxometric_Analysis_Submission_v3.docx>)會被 Mail client 留在 text quote 裡,但 list_attachments(reply_email) 會回傳空陣列。兩者不一致時以 list_attachments 為準。回信 md 的 Attachments: 區塊建議寫 cross-reference:

(Attachments on the original email from Tatsuma — see `2026-04-08_..._al-1.md`)

6. Backfill(既有歸檔補附件)(確定)

若歷史 md 已歸檔但附件沒抓,可以後補:

  1. list_attachments 取得檔案清單
  2. save_attachmentattachments/{既有 md stem}/
  3. Edit md 在簽名後插入 Attachments: 區塊

本次 backfill 範例:2026-03-17 的 v2 原稿(4 檔 882 KB)+ 2026-03-23 的 Keng-Ling track-changes 版(1 檔 143 KB)。

7. Thread 覆蓋度檢查(新發現)

執行 /archive-mail 後,若要保證附件完整,應對已歸檔的同 thread email 全部跑 list_attachments_batch 檢查是否有漏抓的附件。今天發現 3/23 整封 email 漏歸檔(date_from=2026-03-24 太晚),需要擴大 thread scope。

Expected(spec)

在 Step 5 生成 Markdown 前新增 Step 4.5「下載附件」:

  1. list_attachments_batch([所有待歸檔 email]) → 一次取得所有附件元資料
  2. 對每個有附件的 email:
    • mkdir -p {output_dir}/attachments/{主郵件 markdown stem}/
    • 對每個附件 save_attachment(...) 到該目錄(保留原檔名)
  3. Step 5 生成 Markdown 時在簽名後插入 Attachments 區塊(見 baseline §4)

Actual

Step 5 只描述 Markdown 內容格式,完全沒提附件下載。

Impact

  • 歸檔的價值打折:幾年後想看當時討論 "draft v3" 具體內容,需要回 Apple Mail 找,Mail 若已清理或帳號異動就失去附件
  • 對合作者來說歸檔不完整
  • /archive-mail 的「完整歸檔到本地」語意不符

Open Questions

Baseline 已回答 Q1 (目錄)、Q4 (檔名)、新增了 position / encoding / backfill 規則。剩下 3 個需在 diagnose 階段決定

  • Q1 目錄結構Decided: attachments/{main-email-markdown-stem}/
  • Q2 去重:同一附件被多封信 forward 時如何處理(hash 檢查 / 忽略 / 每封信各存一份)?
  • Q3 大小限制:超過 N MB 的附件是否跳過?是否接 git-lfs?(baseline 實作的最大檔案為 439 KB,未踩到限制)
  • Q4 附件檔名Decided: 保留原檔名,僅 URL encoding
  • Q5 跳過規則:簽名檔裡的 logo 圖片、email client 的 inline image 是否要歸檔?
  • Q6 .claude/emails.md 新增欄位archive_attachments: bool(預設 true)、attachment_size_limit_mb: int(預設 25)、skip_inline_images: bool(預設 true)?
  • Q7 (新)Thread 覆蓋度:/archive-mail 是否該自動對同 thread 已歸檔 email 做 backfill 檢查?或另外提供 /archive-mail --backfill-attachments

Dependencies

Reference implementation

Tatsuma 專案 2026-04-14 backfill:

  • PsychQuant/collaborations_tatsuma commits bcac7ee (init) + 784eac6 (backfill)
  • 3 個目錄、7 個附件、2 個 md 更新 + 1 個新 md
  • 檔名從 54 KB docx 到 439 KB pdf 皆驗證 OK

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions