google-apps-script - 使用 Google 应用脚本将电子邮件标记为已读
问题描述
我是 Google App Script 的业余爱好者。
让这个脚本运行正常,但需要再实现一个功能。现在我需要这个: 脚本读取的电子邮件我需要标记为已读
我试图整合几个选项,但没有积极的结果。
谁能帮我在脚本本身中实现它
function processInboxToSheet() {
//var threads = GmailApp.getInboxThreads();
// Have to get data separate to avoid google app script limit!
var start = 0;
var threads = GmailApp.search("newer_than:1d AND is:unread AND label:eur OR label:desc",0,100);
var sheet = SpreadsheetApp.getActiveSheet();
var result = [];
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
var content = messages[0].getPlainBody();
// implement your own parsing rule inside
if (content) {
var tmp;
tmp = content.match(/\b([A-B\d][A-B\d]{4})\b/);
var cod = (tmp && tmp[1]) ? tmp[1].trim() : 'Error';
tmp = content.match(/\b(\d+[R])/);
var prom = (tmp && tmp[1]) ? tmp[1].trim() : 'Error';
tmp = content.match(/\b(\d{2}\.\d{2}\)\b/);
var exp = (tmp && tmp[1]) ? tmp[1].trim() : 'Error';
sheet.appendRow([cod, prom, exp]);
Utilities.sleep(500);
}
}
};
解决方案
如果我理解正确,您希望将每个线程中的第一条消息标记为已读。为此,您必须使用markRead()。
现在,这是一个对应于GmailMessage 类的方法。因此,您需要从此类的实例中调用此方法。现在,在您的代码中,您有一个变量messages
,它是线程中消息的数组,而不是消息。要访问单个消息,您必须指定数组的索引。线程中的第一条消息对应于message[0]
,因此您必须使用markRead
。
因此,您唯一需要做的就是在for
循环内的任何位置以及定义之后添加以下代码行messages
:
messages[0].markRead();
(如果您只想在消息具有正文内容时将消息标记为已读,则必须在if
块内添加上面的行。)
此外,如果您想将线程标记为已读(GmailThread 也有一个markRead 方法for
,您可以在循环开头的这行代码处:
threads[i].markRead();
我希望这有任何帮助。
推荐阅读
- javascript - 将 DTO 发布到 Spring Controller,参数为空
- reactjs - 如何将道具传递给子 React 组件?
- django - 什么时候我们不在 Django Rest Framework 的 ModelSerializer 中使用“__all__”
- java - 使用 Log4j2 减少 Java 堆栈跟踪日志记录
- visual-studio - 是否有一个文件夹我可以删除一个 .vsix 文件,它会导致 Visual Studio 在下次打开时从该文件更新?
- keycloak - JBPM 创建的案例和任务不可见或不可访问
- javascript - CSS 关键帧在开发环境中运行良好,但在生产环境中运行不正常
- python - 包含来自 2 个数据帧的不同值的输出行
- java - 在测试 REST api 时,我得到 200OK,而我应该得到 403
- reactjs - 我的 typeorm 迁移:运行完成但不创建表