JXA 将消息移动到不同的 folder/mailbox
JXA Move a message to a different folder/mailbox
我一直在使用 Apple 的脚本编辑器编写 JXA 脚本。本质上,我想浏览我的收件箱文件夹并将超过 44 天的邮件移动到存档文件夹。我可以找到帐户、我的收件箱和存档 "mailboxes",但我一辈子都想不出如何将该死的邮件移到新邮箱。
这是我目前的情况:
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 对象有一个邮箱 属性,但是以下 none 似乎有效:
messages[i].mailbox = archive;
messages[i].mailbox(archive);
如有任何帮助,我们将不胜感激。
在 Apple Discussion Board 上提问并得到了答案。
本质上,替换
// now what???
...与...
Mail.move(messages[i], {to: archive});
其实那边的post有更简洁的方法,不过上面的也行。
哎呀。这个任务应该是一个简单的两行脚本 [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 加上简单的 first-class 关系查询。 (稍长一些,如果有些不完整的解释 here。)
我一直在使用 Apple 的脚本编辑器编写 JXA 脚本。本质上,我想浏览我的收件箱文件夹并将超过 44 天的邮件移动到存档文件夹。我可以找到帐户、我的收件箱和存档 "mailboxes",但我一辈子都想不出如何将该死的邮件移到新邮箱。
这是我目前的情况:
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 对象有一个邮箱 属性,但是以下 none 似乎有效:
messages[i].mailbox = archive;
messages[i].mailbox(archive);
如有任何帮助,我们将不胜感激。
在 Apple Discussion Board 上提问并得到了答案。
本质上,替换
// now what???
...与...
Mail.move(messages[i], {to: archive});
其实那边的post有更简洁的方法,不过上面的也行。
哎呀。这个任务应该是一个简单的两行脚本 [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 加上简单的 first-class 关系查询。 (稍长一些,如果有些不完整的解释 here。)