1

好的,我需要根据某些标准自动将一些电子邮件添加到我的 Daylite 任务中,因此我设置了 Mail.app 规则和 AppleScript 来完成此操作。只有一个问题:当 AppleScript 获取消息的内容时,它会在末尾添加一个“a”(并且还会发出哔声,让我知道它尝试了一些显然不允许的击键)。

这是 AppleScript 的样子:

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        tell application "Mail"
            repeat with eachMessage in theMessages
                try
                    set this_subject to subject of eachMessage
                    set this_body to content of eachMessage
                    if this_subject is "" then error
                on error
                    set this_subject to "No subject."
                end try
                activate application "Daylite"
                tell application "System Events"
                    keystroke "t" using {command down, shift down}
                    keystroke this_subject
                    keystroke tab
                    keystroke this_body
                    keystroke "s" using command down
                end tell
            end repeat
        end tell
    end perform mail action with messages
end using terms from

这导致我在 Daylite 中获得了一个新任务,其中任务标题是电子邮件主题,并且显示正确,但作为电子邮件正文的附件注释未正确显示。

因此,如果我收到一封符合我的规则的电子邮件,并且该电子邮件是:

来自:假想的妻子

主题:别忘了倒垃圾!

身体:如果你再忘记一次,我提出离婚。

最终的任务如下所示:

☐ 不要忘记倒垃圾!

如果你再忘记一次,我正在申请离婚。

......在这种情况下让我假想的妻子听起来像一个几乎没有文化的加拿大人。(此外还有系统警报声,让我知道它显然试图输入不允许的内容。)

如果正文有多行文本,它也会令人讨厌地删除换行符。

我知道我可以将其设置为:

set the clipboard to this_body

然后替换

keystroke this_body

keystroke "v" using command down

…但这是一个非常不雅的解决方案,我不想在每次规则运行时都替换剪贴板中的任何内容。

我在这里做错了什么?我也在 TextEdit 中对此进行了测试,同样的问题也出现在那里,所以这不是 Daylite 问题。我还尝试将“作为 Unicode 文本”或“作为字符串”或“作为«class UTF8»”附加到“设置 this_body...”行的末尾,但这些都没有解决问题。

请像我是个彻头彻尾的白痴一样向我解释,因为作为一个彻头彻尾的白痴,这是我理解你的唯一方式。谢谢。

4

1 回答 1

2

许多人犯的基本错误之一是告诉应用程序执行应用程序不知道如何执行的操作。你应该只告诉应用程序做你可以在它的applescript字典中找到的事情,因为这实际上是应用程序知道如何做的所有事情......除了一些基本的通用applescript东西,比如执行重复循环。

你掉进了这个陷阱。您是在告诉 Mail 告诉 Daylight 和 System Events 执行操作,因为所有这些代码都在“告诉应用程序 Mail”代码块中。这种类型的错误通常会导致很难追踪的问题。

因此,我的第一个建议是停止告诉 Mail 做不必要的事情。以下是我将如何编写代码以将不同的应用程序命令彼此分开。

using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule
        repeat with eachMessage in theMessages
            tell application "Mail"
                set this_subject to subject of eachMessage
                set this_body to content of eachMessage
            end tell
            if this_subject is "" then set this_subject to "No subject."

            activate application "Daylite"
            delay 0.2
            tell application "System Events"
                tell process "Daylite"
                    keystroke "t" using {command down, shift down}
                    delay 0.2
                    keystroke this_subject
                    delay 0.2
                    keystroke tab
                    delay 0.2
                    keystroke this_body
                    delay 0.2
                    keystroke "s" using command down
                end tell
            end tell
        end repeat
    end perform mail action with messages
end using terms from

您还会注意到我在您的一些代码之间添加了一个小延迟。有时代码运行的速度比计算机界面可以处理的快,所以这也可能是你的错误的根源。如果需要,您还可以尝试增加延迟的长度(任何超过 1 秒的延迟都是多余的,不应该是必要的)。

如果这些更改和更长的延迟不起作用,那么一个简单的解决方案是检查文本是否以“a”结尾并删除它。在击键选项卡和击键 this_body 行之间是这样的......

if this_body ends with "a" then set this_body to text 1 thru -2 of this_body

祝你好运!

编辑:“击键”过程似乎不喜欢电子邮件中的返回字符。我相信这就是导致噪音的原因......当它击中返回字符时它会发出哔哔声。无论如何,你可以尝试这样的事情。只需打开一个空白的 TextEdit 文档并在 Mail 中选择一封电子邮件,然后在 AppleScript Editor 中运行代码。您可以将这个想法融入您的 Daylight 脚本中。

tell application "Mail"
    set eachMessage to item 1 of (get selection)
    set this_subject to subject of eachMessage
    set this_body to content of eachMessage
end tell

set bodyList to paragraphs of this_body

activate application "TextEdit"
tell application "System Events"
    tell process "TextEdit"
        repeat with i from 1 to count of bodyList
            keystroke (item i of bodyList)
            keystroke return
        end repeat
    end tell
end tell
于 2013-06-19T14:13:37.910 回答