JXA:在Apple Mail中创建邮箱

时间:2017-07-25 13:16:21

标签: applescript jxa

我正在尝试使用JavaScript在Apple Mail中创建子邮箱。

我有以下代码段(parent是对我想要新邮箱的邮箱的引用):

var mb = mail.Mailbox({name: "SubFolder"});
parent.mailboxes.push(mb);

事件日志显示:

app = Application("Mail")
 app.mailboxes.byName("Local").mailboxes.byName("Archive").mailboxes.push(app.Mailbox({"name":"SubFolder"}))

    --> Error -10000: AppleEvent handler failed.

我做错了什么?

谢谢, 克雷格。

现在代码:

var mb = mail.Mailbox({name: "Local/Archive/Test Archive/SubFolder"})
logger.logDebug("mb = '" + Automation.getDisplayString(mb) + "'.");
mail.mailboxes.push(mb)                     // create the subfolder

只要路径中没有空格,这就可以工作。 我试图在它前面使用\\强制空间,但是然后你得到"测试\存档"正如名字一样。

那么如何让名字中的空格起作用呢?

感谢。

1 个答案:

答案 0 :(得分:1)

要创建子文件夹,您需要一个类似posix路径的名称 - > "/theMasterMailbox/subMailBox1/subMailBox2/subMailBox3"

所以,你需要:

  • 将每个父文件夹的名称放入数组的循环。
  • 使用join('/')将数组元素连接成字符串。
  • 使用mail.mailboxes.push(mb)代替parent.mailboxes.push(mb)

这是一个示例脚本,用于在所选文件夹(邮箱)中创建名为“ SubFolder ”的邮箱:

mail = Application('com.apple.Mail')
parent = mail.messageViewers()[0].selectedMailboxes()[0]

mboxNames = [parent.name()]
thisFolder = parent
try {
    while (true) { // loop while exists the parent folder 
        mboxNames.unshift(thisFolder.container().name()) // add the name of the parent folder to the beginning of an array
        thisFolder = thisFolder.container() // get the parent of thisFolder
    }
} catch (e) {} // do nothing on error, because thisFolder is the top folder

mboxNames.push("SubFolder") // append the name of the new subFolder to the array

mBoxPath = mboxNames.join('/') // get a string (the names separated by "/")
mb = mail.Mailbox({name:mBoxPath})
mail.mailboxes.push(mb) // create the subfolder