Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/480.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JXA将邮件移动到其他文件夹/邮箱_Javascript_Applescript_Javascript Automation - Fatal编程技术网

Javascript JXA将邮件移动到其他文件夹/邮箱

Javascript JXA将邮件移动到其他文件夹/邮箱,javascript,applescript,javascript-automation,Javascript,Applescript,Javascript Automation,我一直在使用Apple的脚本编辑器编写JXA脚本。基本上,我想通过我的收件箱文件夹,将超过44天的邮件移动到存档文件夹中。我可以找到帐户、收件箱和存档“邮箱”,但我一辈子都不知道如何将该死的邮件移动到新邮箱 以下是我目前掌握的情况: var staleTime = 44; var countMessages = 0; var Mail = new Application("Mail") var accounts = Mail.accounts(); var account; var found

我一直在使用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???
    }
}

如果有任何帮助,我们将不胜感激。

在网上询问了这个问题并得到了答案

本质上,替换

//现在怎么办?

。。。与

Mail.move(messages[i],{to:archive})


事实上,那边的帖子有一种更简洁的方式,但上面的方法也很有效。

Yikes。此任务应该是一个简单的两行脚本[1]:

set cutoffDate to (current date) - 44 * days
tell application "Mail" to move (every message of inbox whose date sent < cutoffDate) to mailbox "Archive"
将截止日期设置为(当前日期)-44*天
告诉应用程序“邮件”将(发送日期<截止日期的收件箱中的每封邮件)移动到邮箱“存档”
至于如何将其转换为JXA,我通常会推荐坚持使用AppleScript,其中包括未损坏的实现、更好的(如果仍然不理想的话)文档,以及一个由专家用户组成的社区,他们总是乐于解释和帮助新手

或者,更简单的是,只需设置邮件规则,就可以完全避免编写脚本



[1] 假设你知道苹果基于事件的自动化是如何工作的,99.99%的程序员不知道这一点是因为1。苹果公司自己的文档完全没有清楚或正确地解释它,以及2。编写桥接器和JXA脚本会削弱和混淆其中的垃圾。简短版本:它不是OOP,而是RPC加上简单的一级关系查询。(稍长一点,如果解释有点零碎。)

下面是如何将AppleScript片段翻译成JXA:
var cutoffDate=new Date(Date.now()-44*60*60*24*1000);Application(“Mail”).move(Application(“Mail”).inbox.messages.which({dateSent:{'不太漂亮,但我想应该感谢它能表达出来。顺便说一句,最好使用
byName(…)
,而不是括号符号,来构造按名称说明符,因为JXA无法可靠地将它们与属性/元素说明符区分开来。(与Python/Ruby/ObjC/etc不同,JS将
foo.bar
foo['bar']
视为可互换的。)在这种特殊情况下,您可以避免它,因为
mailbox
对象没有
archive
属性,但使用
byName
方法可以避免被不小心的人绊倒的风险。
set cutoffDate to (current date) - 44 * days
tell application "Mail" to move (every message of inbox whose date sent < cutoffDate) to mailbox "Archive"