iMessage Exporter 是什麼?把蘋果訊息匯出成 HTML 的開源唯讀工具

iMessage Exporter 是一支用 Rust 寫的開源命令列工具,把 macOS chat.db 與 iOS 備份裡的 iMessage 聊天紀錄還原成 HTML 或 TXT 開放檔案。它走 GPL-3.0、嚴格唯讀、讀不到只存在 iCloud 的訊息,這篇拆解資料來源、四種附件轉檔模式,以及採用前要評估的硬邊界。

用 AI 摘要這篇文章:

iMessage Exporter 是一支用 Rust 寫的開源命令列工具,會把 macOS 或 iOS 備份裡的 iMessage 聊天紀錄讀出來,還原成在任何瀏覽器都打得開的 HTML 或純文字檔。它走 GPL-3.0 授權、嚴格唯讀,而且只讀你提供的來源裡實際存在的資料。換句話說,它能把蘋果圍牆裡的訊息搬出來,但有幾條邊界會直接決定它能不能用在你身上:商業衍生要連同授權一起開源、沒辦法把訊息匯回另一個 Apple ID、也讀不到只存在 iCloud 雲端而本機沒有副本的訊息。這篇把資料來源、匯出格式、附件處理與這幾條硬邊界一次拆開。

如果你過去也想把某個即時通訊平台的對話搬出來保存,例如用過 閒魚聊天匯出工具那類 exporter,這裡的邏輯類似:封閉平台把資料鎖在自己的資料庫,你要靠自己把它讀出來變成開放檔案。差別在於 iMessage 的資料庫是蘋果私有的 SQLite 結構,訊息本體還套了一層蘋果自己的編碼,逆向工程起來更費工,也更依賴作者持續跟著蘋果改版。

唯讀逃生口:把蘋果私有格式還原成你掌控的檔案

iMessage 的訊息本體存在一個 SQLite 資料庫(macOS 上是 ~/Library/Messages/chat.db),但裡面的欄位、附件指向,以及訊息本體用的蘋果私有編碼(例如 typedstreampayload_data plist)都不是蘋果公開文件會教你讀的格式。iMessage Exporter 做的事,是靠逆向工程把這些私有結構還原成 Rust 原生資料結構,讓 Linux 與 Windows 也能讀同一份資料,不必依賴 macOS 系統 API。README 在 Special Thanks 段落點名 SQLiteFlow、Xplist,以及 GNU Project 與 Archive.org,分別用來拆解 chat.db 結構、payload_data plist 與 typedstream 格式。訊息存在這種關聯式資料庫,也代表你想自己挖原始資料,可以搭配 支援 SQLite 的資料庫客戶端直接進去翻 schema,只是欄位意義要自己摸。

作者在 README 開頭把專案目標寫成「提供目前對 iMessage 資料最完整、最精確的呈現」。這句是作者自己的定位宣稱,不是第三方驗證過的結論;不過專案在 GitHub 拿到五千多顆星、持續更新到 4.2.0,是支援這個宣稱的客觀跡象,至少說明它被相當多人拿來真的用,而不是只停在概念展示。

ReagentX/imessage-exporter 的 GitHub 倉庫首頁,顯示專案名稱、Public 徽章、Export iMessage data + run iMessage Diagnostics 描述、Stars 與 Forks 數,以及 README 的 Example Export 樣圖Pin
ReagentX/imessage-exporter 倉庫首頁。Rust 專案、GPL-3.0 授權,定位寫明是 Export iMessage data + run iMessage Diagnostics。

靠逆向工程跨平台是有代價的。蘋果每次改 schema、改附件的雜湊命名規則、或改訊息本體的編碼方式,這套工具都得跟著更新才能繼續正確讀取。這也是 README 特別把支援範圍標到具體蘋果版本(目前到 macOS Tahoe 26.6 與 iOS 26.6)的原因:它能正確解析的範圍,是被作者實際拆解過的版本範圍,超出這個範圍的訊息格式未必會壞,但作者沒辦法保證。實務上,遇到蘋果大改版時,先用 -d 診斷模式確認資料庫讀得到、schema 看得出來,再正式匯出,會比直接跑穩當。

整支工具是唯讀的。作者在 FAQ 回答能不能把對話匯回另一個 Apple ID 時直接寫道,他不願意被信任去對使用者的 iMessage 資料有寫入權限,這套軟體是唯讀。這條設計選擇決定了工具的性格:它是單向的逃生口,把訊息搬出來變成你可以長期保存、自由搬移的開放檔案;它不會同步回去,也無法拿來把訊息灌回蘋果生態。想把對話整批搬到新手機或另一個 Apple ID 的人,到這裡就要明白:匯出可以,匯回不行。

能讀的三種來源與讀不到的 iCloud

資料來源有三種。最常見的是 macOS 本機的 chat.db,預設路徑是 ~/Library/Messages/chat.db,你也可以用 -p 指定別的位置,例如外接硬碟裡拷貝出來的舊資料庫,或從當機搬不出來的舊 Mac 拆硬碟拿出來的檔案。另一條路是一份 iOS 裝置備份,加密備份也支援,指令列會問你備份密碼,或用 --cleartext-password 帶入(作者提醒這會讓密碼出現在畫面與 shell 歷史紀錄,建議盡量用互動輸入)。沒有 Mac 的人,也可以用越獄 iOS 抓出來的 sms.db 當來源,但要加上 --platform macOS 讓程式用 macOS 的 schema 去讀。

iOS 備份這條路對沒有 Mac、或 Mac 已經報銷的人特別有用。你可以在 Windows 上用 iTunes 或 Apple Devices App、在 macOS 上透過 Finder 做一份本機加密備份,再用 -p 指到那個備份資料夾、加 -a iOS 讓工具知道來源是 iOS。備份密碼要記得,加密備份裡的訊息不給密碼是讀不出來的。

真正會卡住人的限制是 iCloud。如果開了「訊息在 iCloud」同步,而且訊息已經被系統卸載到雲端、本機沒有完整副本,iMessage Exporter 讀不到那些只存在 iCloud 的內容。FAQ 的講法很直白:它只能讀你提供的來源裡實際存在的資料,無法讀只存在 iCloud 的資料。匯出前你得先回 macOS 的訊息 App,點進對話的資訊鈕把附件完整下回本機,或先關閉 iCloud 同步讓本機補齊。對附件已經被系統自動卸載的舊對話,這一步是必要前置,不是可選的優化,跳過它你會拿到一份看似完整、其實缺一大塊附件的匯出。

兩種匯出格式與一條官方範例

匯出格式只有 txt 與 html 兩種,沒有原生 PDF。需要 PDF 歸檔的人要多走一步:先用 html 匯出,再用 Safari 打開、列印成 PDF;這個流程要加上 --no-lazy 旗標,把圖片的 lazy-loading 關掉,PDF 才會把所有圖片嵌進去,不然匯出的 PDF 會是空的圖框。官方 PDF 流程指名用 Safari 列印,其他瀏覽器未必能正確處理這份 HTML 對本機附件的參照。

README 給的代表範例是這條指令:

imessage-exporter -f html -c full

意思是:從預設位置讀 chat.db,匯出成 HTML,附件用 full 模式轉成網頁相容格式,輸出放在 ~/imessage_export。你可以加日期區間 -s-e 只匯某段時間,這在做法律保存或合規歸檔時很實用,例如只匯出某一年、或某段專案期間的對話。也可以用 -t 指定聯絡人,例如 -t "[email protected],5558675309" 只匯與某幾個號碼或信箱的對話;它支援子字串匹配,-t "+1555" 會撈出所有這個前綴的號碼。被過濾的聯絡人只要出現在群組對話裡,那個群組對話也會被匯出,這對「我要某個同事講過的所有話」這類需求很關鍵。

輸出時每個對話會獨立一個檔案;沒辦法對應到任何對話的訊息會被集中到 orphaned.htmlorphaned.txt,這通常是資料庫因為刪除對話而留下斷鏈造成的,作者選擇保留這些孤兒訊息,避免資料無聲消失。HTML 匯出還能自訂外觀:每個 HTML 檔會參照輸出目錄裡的 style.css,你只要建這個檔就能蓋過預設樣式,而且因為自訂樣式載入順序在預設之後,同一個優先級下會贏過預設。對要把匯出結果交給律師、主管或家人看的情境,這層樣式控制比陽春的純文字檔更實用。

附件轉檔的四種模式與平台差異

附件怎麼處理是會影響匯出成果的決定,README 的 --copy-method 提供四種模式。disabled 是預設值,完全不複製附件,HTML 只用檔案路徑指向原始位置,一旦你之後搬移了原始附件,匯出檔裡的圖就會斷,這個模式只適合你明確知道資料庫與附件永遠不會搬家的情況。clone 把所有附件原封不動複製一份,畫質與格式都不轉換,好處是零損耗、壞處是 HEIC 在非蘋果環境打不開。basic 複製全部附件,並把 HEIC 影像轉成 JPEG,讓絕大多數瀏覽器與看圖軟體都能直接顯示。full 再進一步,把 HEIC 轉 JPEG、CAF 與 AMR 音訊轉 MP4、MOV 影片轉 MP4、動態 HEICS 貼圖轉 GIF,目標是產出一份在任何平台、任何瀏覽器都開得了的匯出。

後面兩種需要外部轉檔器,而且平台有差。圖片在 macOS 用系統內建的 sips,在 Linux 與 Windows 要自己裝 ImageMagick;音訊在 macOS 用 afconvert,在其他平台要用 ffmpeg;影片則不論平台都要 ffmpeg。這代表 Linux 與 Windows 使用者選 full 之前,得先確認這些工具都裝好,不然轉檔這一步會在過程中失敗。-d 診斷模式會列出系統上偵測到的轉檔器,選 full 之前先跑一次診斷、確認該裝的都裝了,是比事後除錯省事的做法。對長期歸檔的需求,full 模式換來的 MP4 與 JPEG 比蘋果原生的 HEIC 與 MOV 更不容易在十年後變成打不開的孤兒格式,這是它對「資料真正搬出蘋果圍牆」這個目標的關鍵價值。

4.2 新增能力與刪除訊息的復原界線

最新版本 4.2.0(代號 Stream Orchid,2026 年 6 月 18 日發布)補上幾塊以前匯不出來的東西。貼圖與 Genmoji 可以內嵌在訊息文字裡做行內渲染,不再只是獨立附件;只含貼圖或表情符號的訊息會放大成 jumbomoji 風格,與 iMessage 介面看到的尺度一致。Digital Touch 訊息(心跳、火球、草圖、親吻這類)能渲染成靜態 SVG 畫面嵌在 4:5 的黑色畫布上,照片類的 Digital Touch 會保留原照片當底圖再疊上手繪覆蓋,影片類的則嵌入影片播放器。商業客服對話的 Quick Replies、互動表單(提交與接收兩端都渲染)、清單選擇器也納入匯出,這代表你跟銀行或電商客服的往來也能完整留下來。README 把支援範圍標到涵蓋 macOS Tahoe 26.6 與 iOS 26.6 的全部 iMessage 特性,比部分第三方轉述還新。

ReagentX/imessage-exporter 的 GitHub Releases 頁面,最新版本 4.2.0 Stream Orchid 條目,標記 Latest,列出 Inline sticker rendering、Digital Touch rendering、Business Chat messages 三項新功能Pin
Releases 頁顯示最新版本 4.2.0(Stream Orchid),補上行內貼圖、Digital Touch 與商業客服訊息渲染。

對想救回刪除訊息的人,FAQ 給的是一個有限但誠實的答案。蘋果自己有 30 天的刪除復原期限,這段時間內從對話或單則訊息刪掉的內容會被搬去另一個集合,iMessage Exporter 會把這些訊息還原回所屬對話。超過 30 天、或已經被系統永久刪除的訊息,就救不回來。少數情況下訊息已從 chat_message_join 表移除、但還留在 messages 表裡,這類孤兒訊息會出現在剛剛提到的 orphaned 檔案中,不會無聲消失。語音訊息只要還沒被系統刪掉就會一起匯出;已經過期被系統刪掉的,因為檔案本體已經不在磁碟上,就沒辦法了。如果你匯出的動機是為了舉證某段已刪除的對話,這個 30 天期限就是你要計算的硬邊界。

採用前的硬邊界與安裝第一步

授權是 GPL-3.0,這是一種強 copyleft 授權:你可以自己用、可以內部部署,但把這套程式碼包進你自己要對外發布的產品,衍生作品也得用相同的 GPL-3.0 釋出原始碼。對個人備份與公司內部歸檔沒有影響,對想做商用 iMessage 備份服務、或把這套邏輯封裝成閉源產品出售的人就是硬門檻。如果你是後者,採用前要先評估的不是功能夠不夠,而是你的產品能不能接受相同授權釋出。

唯讀這條前面講過,它是單向出口。你匯出後的檔案完全歸你掌控,可以備份、可以搬到別台電腦、可以用任何工具搜尋,但這些檔案與蘋果的訊息資料庫不會再雙向同步。作者在 FAQ 也直接說這套軟體沒有搜尋功能,他自己搭配另一個開源工具 ripgrep 在匯出的檔案裡找字,這呼應了它「把資料變成你自己掌控的檔案」的定位。想把訊息從舊機器搬到新機的人,iMessage Exporter 可以幫你把對話變成可攜檔案,這與 Mac 應用搬移工具是互補的兩件事:一個搬應用與設定,一個搬訊息內容。

iCloud 缺口這條也要再算進去。訊息一定要實際存在你提供的來源裡,開了 iCloud 同步又沒把附件下回本機的人,匯出前要先處理這件事,不然結果會缺東缺西,而且缺的地方不會特別提醒你。一個比較保險的做法,是匯出前先在訊息 App 把每個要保留的對話附件都點開讓它下載,或乾脆暫時關掉 iCloud 同步一陣子讓本機補完整份。

macOS 使用者還有一個容易漏的前置:終端機要有 Full Disk Access,不然程式讀不到 chat.db,會直接報錯退出。這個設定在系統設定的大類「隱私與安全」裡的「完整磁碟存取」,把你的終端機 App(例如 Terminal.app 或 iTerm)勾進去即可。iOS 備份來源沒有這個限制,但加密備份要備好密碼。

安裝有四條路。官方推薦用 Rust 的 cargo install imessage-exporter,這會抓最新發布版;macOS 也可以 brew install imessage-exporter,但 Homebrew 公式未必是最新版,README 自己也標明它可能落後;Apple Silicon 與 Intel Mac 都有預編譯 binary 可以從 GitHub Releases 頁下載,適合不想裝 Rust 工具鏈的人;想自己編就 clone 專案再 cargo run --release。無論走哪條路,裝完先跑一次 imessage-exporter -d 的診斷模式、確認資料庫讀得到與轉檔器都到位,是比直接開始匯出穩當的第一步。如果你追求的是圖形介面、或希望它自動從 iCloud 撈訊息、或想把訊息寫回蘋果生態,這套工具都不是答案,把這三條期待先放掉,再評估它符不符合你要的備份與歸檔流程。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 846

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...