我很难使用Apple的脚本编辑器编写JXA脚本。基本上,我想浏览我的收件箱文件夹并将超过44天的邮件移动到存档文件夹。我能够找到该帐户,我的收件箱和存档“邮箱”,但我不能为我的生活弄清楚如何将该邮件移动到新邮箱。
这是我到目前为止所拥有的:
var staleTime = 44;
var countMessages = 0;
var Mail = new Application("Mail")
var accounts = Mail.accounts();
var account;
var found = false;
for (i = 0; i < accounts.length && !found; ++i) {
if (accounts[i].name().indexOf("xchange") > -1) {
account = accounts[i];
found = true;
}
}
var mailboxes = account.mailboxes();
var inbox;
var archive;
for (i = 0; i < mailboxes.length; ++i) {
if(mailboxes[i].name().indexOf("nbox") > -1) {
inbox = mailboxes[i];
}
if(mailboxes[i].name().indexOf("rchive") > -1 &&
mailboxes[i].name().indexOf("CDE") == -1) {
archive = mailboxes[i];
}
}
// console.log("mailbox name is: " + inbox.name());
var messages = m inbox.messages();
var fortyFourDaysAgo = new Date();
fortyFourDaysAgo.setDate(fortyFourDaysAgo.getDate() - staleTime);
for (i = 0; i < messages.length; ++i) {
var dateSent = messages[i].dateSent();
if(dateSent < fortyFourDaysAgo) {
// now what???
}
}
我可以在脚本编辑器的字典帮助中看到Message对象具有邮箱属性,但以下任何一项都不起作用:
messages[i].mailbox = archive;
messages[i].mailbox(archive);
任何帮助将不胜感激。
答案 0 :(得分:3)
在Apple Discussion Board上提出问题并得到答案。
基本上,替换
// now what???
...与......
Mail.move(messages[i], {to: archive});
实际上,那里的帖子有一个更简洁的方式,但上面也有效。
答案 1 :(得分:0)
让人惊讶。这个任务应该是一个简单的两行脚本[1]:
set cutoffDate to (current date) - 44 * days
tell application "Mail" to move (every message of inbox whose date sent < cutoffDate) to mailbox "Archive"
关于如何将其翻译成JXA - 好吧,我通常建议坚持使用AppleScript,包括不破坏的实现,更好的(如果仍然不是理想的)文档,以及建立的专家用户社区,他们总是很乐意解释并协助新人。
或者,甚至更简单,只需设置邮件规则并完全避免编写脚本!
[1]假设您了解Apple基于事件的自动化实际上是如何工作的,99.99%的程序员不会因此而导致1. Apple自己的文档未能完全解释清楚或正确,以及2.脚本桥和JXA瘫痪和混淆它的垃圾。简短版本:它是不 OOP,它是RPC加上简单的一流关系查询。 (稍长一点,如果有些不完整的解释here。)