如何让AppleScript获取邮件消息的属性

编程语言 2026-07-11

尝试这种方法:

set counter to 1
repeat with each_message in mailbox "INBOX" of account "iCloud"
        set message_ref to (a reference to each_message)
        set message_contents to contents of message_ref
        get date string of date received of message_contents
        counter = counter + 1
        if counter > 10 then stop
end repeat

(再次,我在尝试“a reference to”这种用法,因为我可能想从收件箱中删除这条消息。) 这会产生错误“can't make each_message into type reference”。这是怎么回事?

原始方法:

tell application "Mail"
set the_message to a reference to last message of mailbox "INBOX" of account "iCloud"
open the_message
display dialog (date string of date received of the_message)
end tell

“display dialog”会导致错误。(我在尝试“a reference to”因为我可能想删除这条消息。无论是否包含它,我都会得到同样的错误。)

解决方案

针对你当前的方法:

首先,邮箱是一个用来保存消息的容器,但重复循环的变量本身并不是一条消息。你需要从容器中取出一个元素,比如一条消息,例如:

repeat with each_message in (messages of mailbox "INBOX" of account "iCloud")

你也在使用repeat x in y形式,在这种形式中,循环变量x本身就是对y中某个条目的引用。要处理实际的消息,你需要对该引用所指向的内容进行操作:

set message_ref to (a reference to contents of each_message)

综合起来,你将得到类似的结果:

tell application "Mail"
    set counter to 1
    repeat with each_message in (messages of mailbox "INBOX" of account "iCloud")
        set message_ref to (a reference to contents of each_message)
        set message_contents to contents of message_ref
        display dialog date string of (get date received of message_contents)
        set counter to counter + 1
        if counter > 10 then exit repeat -- stop
    end repeat
end tell

原始方法:

这是那种没有隐含“获取”的情形之一。

在你获取date received,date string的复合语句中,并不存在对date received的隐含“获取”。显式获取date received会使date string有一个目标:

display dialog date string of (get date received of the_message)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章