如何使用JavaScript访问Apple Mail中所选邮件的主题?

时间:2017-10-20 12:11:48

标签: javascript macos automation applescript

从10.10开始,Apple开始也支持JavaScript for Automation而不是AppleScript,但我真的很难理解他们的JavaScript语法。

E.g。让我们来看看这个简单的AppleScript:

tell application "Mail"
    set seletedMails to selection
    repeat with aMail in seletedMails
        set aSubject to subject of aMail
        display dialog aSubject
    end repeat
end tell

它只是在Mail应用程序中显示一个对话框,其中包含每个选定电子邮件的主题。不能比那简单得多,可以吗?在JavaScript中应该很容易做到这一点,对吧?所以这是我的代码

function main ( ) {
    var Mail = Application('com.apple.mail')
    Mail.includeStandardAdditions = true
    var selectedMails = Mail.selection  
    for (var aMail of selectedMails) {
        Mail.displayDialog(aMail.subject)
    }
}
main()

结果:

Error -1700: Can't convert types.

好的......我做错了什么?我也无法调用selectedMails.length,同样的错误。 selectedMails似乎根本不是一个数组。哦,等等,当我这样做var selectedMails = Mail.selections(注意复数形式!),然后我可以做selectedMails.length,但它总是给我0,无论我选择了多少邮件。当我这样做时(注意,也使用复数形式):

function main ( ) {
    var Mail = Application('com.apple.mail')
    Mail.includeStandardAdditions = true
    var selectedMails = Mail.selections
    for (var aMail of selectedMails) {
        Mail.displayDialog(aMail.subject)
    }
}
main()

它只说:

Error -2700: Script error.

我们在这里获得了非常有用的错误消息,而不是!

1 个答案:

答案 0 :(得分:1)

你非常接近。 通常,对于JXA,您需要在命令末尾使用括号来获取值。所以,你需要:

Mail.selection()
aMail.subject()

这是完整的脚本,包含我的更改:



'use strict';

var app = Application.currentApplication()
app.includeStandardAdditions = true

var Mail = Application('com.apple.mail')
    var selectedMails = Mail.selection();
				
    for (var aMail of selectedMails) {
        app.displayDialog(aMail.subject());
    }
		




我还添加了var app = Application.currentApplication(),因为这被许多人认为是最佳做法,Apple在其所有文档中都使用了这种做法。

请参阅Introduction to JavaScript for Automation Release Notes