Mail.app 的规则向 AppleScript 发送错误的消息

问题描述 投票:0回答:3

我有以下由 Mail.app 规则触发的 AppleScript:

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        repeat with msg in theMessages
            set theText to subject of msg & return & content of msg & date sent of msg
            display dialog (theText)
        end repeat
    end perform mail action with messages
end using terms from

如果我选择一条消息,右键单击并选择“应用规则”,它就可以正常工作。但是,如果脚本是由传入消息触发的,则 theMessages 中似乎有一条随机消息。

规则如下:enter image description here

我如何获得正确的消息?

我正在使用 High Sierra 和 Mail 11.2。

applescript rules apple-mail
3个回答
0
投票

由于您的脚本将迭代您的邮件,我希望您的消息不会按日期排序...因此,当您运行脚本时,它将采用第一个元素(而不是最新的元素)


您可以运行“邮件”,然后按日期对电子邮件进行排序(最新的位于顶部位置),然后退出并重新运行“邮件”(以仔细检查配置是否已保存)

然后验证您的脚本是否有效。


如果你不想手动设置过滤器,根据this,你可以在开头添加以下脚本:

tell application "System Events" to click menu item "Date" of menu "Sort By" of menu item "Sort By" of menu "View" of menu bar item "View" of menu bar 1 of process "Mail"

在运行脚本之前按日期对电子邮件进行排序,以获得正确的消息。

您还可以查看此处此处此处,以验证并仔细检查规则是否已正确设置。


0
投票

显然,使用规则处理传入消息是一个异步过程。当调用

on perform mail action
时,消息还没有完全更新。仅部分数据可立即获得。

一个可能的解决方法是在脚本中添加

delay 1
。这给 Mail 一秒钟的时间来完成消息的更新。脚本如下所示:

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        repeat with msg in theMessages
            -- delay a bit of time for msg to load
            delay 1

            set theText to subject of msg & return & content of msg & date sent of msg

            — do other processing

        end repeat
    end perform mail action with messages
end using terms from

0
投票

根据我的经验,奇怪的是,在触发规则的提取中,消息 n 是消息 n 的 n 个重复项的列表。虽然这似乎是 Mail 中的一个错误,但事实上 n 反映了提取的消息的正确数量,可作为解决方法用于从接收收件箱中过滤掉提取的消息。

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            repeat with i from 1 to length of theMessages
                set msg to item i of messages in mailbox "ActualNameOfInbox" in account "NameOfAccount"
                set theText to subject of msg & return & content of msg & date sent of msg
                display dialog (theText)
            end repeat
        end tell
    end perform mail action with messages
end using terms from

请注意,邮件的用户界面可能会美化收件箱的实际名称。例如,我的 IMAP 帐户的实际收件箱名称是“INBOX”。

© www.soinside.com 2019 - 2024. All rights reserved.