You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用AppleScript获取Mac「信息」应用中所有未送达iMessage?

用AppleScript收集「信息」应用中的未送达消息

之前尝试通过分析UI元素来实现确实容易踩坑——系统版本更新、界面布局调整都可能让这类脚本直接失效。更可靠的方法是利用「信息」本身开放的AppleScript接口,直接访问消息的属性,完全不用碰UI元素,稳定性高很多。

核心思路

「信息」的AppleScript字典里,每个message(消息)对象都自带delivered(是否已送达)和error message(错误信息)属性,我们可以遍历所有对话和消息,筛选出未送达的条目并收集关键信息。

完整脚本示例

tell application "Messages"
    set undeliveredMessages to {}
    -- 遍历所有对话(包括iMessage和短信)
    repeat with aChat in chats
        -- 遍历当前对话下的所有消息
        repeat with aMessage in messages of aChat
            -- 筛选条件:未送达 或者 存在发送错误信息
            if (delivered of aMessage is false) or (error message of aMessage is not missing value) then
                -- 收集消息关键信息,可按需调整字段
                set messageDetails to {¬
                    chatName:name of aChat, ¬
                    recipient:id of aChat, ¬
                    sendDate:date sent of aMessage, ¬
                    content:content of aMessage, ¬
                    errorInfo:error message of aMessage ¬
                }
                copy messageDetails to end of undeliveredMessages
            end if
        end repeat
    end repeat
    
    -- 处理收集到的结果:弹窗提示或保存到文件
    if length of undeliveredMessages > 0 then
        -- 这里可以替换成保存到文件的逻辑,下面会给出示例
        display dialog "找到" & (length of undeliveredMessages) & "条未送达消息:" & return & return & ¬
            (join undeliveredMessages using return) buttons {"确定"} default button 1
    else
        display dialog "未找到未送达消息" buttons {"确定"} default button 1
    end if
end tell

脚本关键说明

  • chats:获取「信息」里的所有对话,不管是iMessage还是短信对话都能覆盖
  • delivered of aMessage:布尔值,true代表已送达,false代表未送达
  • error message of aMessage:如果消息发送失败,会返回具体的错误提示(比如“无法发送信息”),可以作为补充筛选条件
  • messageDetails:我这里收集了对话名称、收件人ID、发送时间、消息内容和错误信息,你可以根据自己的需求增减字段

进阶:把结果保存到文件

如果需要把未送达消息导出成文本文件,替换脚本里的弹窗部分为以下代码即可(默认保存到桌面):

set outputFile to (path to desktop folder as string) & "未送达消息.txt"
set fileHandle to open for access outputFile with write permission
write "未送达消息列表:" & return & return to fileHandle
repeat with msg in undeliveredMessages
    write "对话:" & chatName of msg & return to fileHandle
    write "收件人:" & recipient of msg & return to fileHandle
    write "发送时间:" & sendDate of msg & return to fileHandle
    write "内容:" & content of msg & return to fileHandle
    if errorInfo of msg is not missing value then
        write "错误信息:" & errorInfo of msg & return to fileHandle
    end if
    write "------------------------" & return to fileHandle
end repeat
close access fileHandle
display dialog "未送达消息已保存到桌面的「未送达消息.txt」" buttons {"确定"} default button 1

注意事项

  • 首先要确保「信息」授权AppleScript访问:打开「系统设置」→「隐私与安全性」→「自动化」,找到对应的脚本工具(比如Script Editor),勾选允许它访问「信息」
  • 这个方法依赖「信息」的AppleScript接口,只要苹果不修改这个接口,脚本就能一直正常工作,比UI操作稳定太多

内容的提问来源于stack exchange,提问作者郑相悦

火山引擎 最新活动