从通知存档时,将Gmail标记为已读


10

Gmail应用程序的最新版本是一项很棒的功能,您可以在其中直接从通知中存档或回复电子邮件。

我的问题是,如果从通知中存档它,则它仍然是未读的(而不是被标记为已读)。反正有解决这个问题的方法吗?

我希望将直接从通知中存档的任何电子邮件自动标记为已读。


1
我认为目前不可能。您可以将其更改为唯一的操作是删除而不是存档。
ale

@AlEverett我希望可以使用替代应用程序或至少一个Google脚本来实现。= /
马拉巴巴

Answers:


5

您是否说过Google Script?

使用Apps脚本将Gmail标记为已读

该脚本背后的思想是将收件箱中未存在的任何邮件标记为已读(即已存档)。

  1. 前往script.google.com来启动脚本。
  2. 选择在小弹出窗口中为Gmail创建脚本。
  3. 删除它给您的所有示例代码。
  4. 替换为它(使用API参考编写):

    函数markArchivedAsRead(){
       var thread = GmailApp.search('label:unread -label:inbox');
       GmailApp.markThreadsRead(threads);
     };
  5. 使用文件>保存保存项目。

  6. 使用文件>管理版本添加新版本,然后输入“初始版本”,然后提交。
  7. 使用“运行”>“ markArchivedAsRead”进行测试运行,并确保在应用程序要求您时对其进行授权。
  8. 使用资源>当前项目的触发器添加一个新触发器,并选择每分钟运行一次以上功能。
  9. 再次保存脚本并退出。

我不知道有必要每分钟运行一次,但是只要您定期运行它即可。

这不是您问题的直接答案,并且如果您有理由收到收件箱中没有的未读邮件,则对您不起作用。


我确实有一些过滤器,它们可能会直接存档未读的电子邮件,并且我希望保留那些未读的电子邮件,但这是一个很好的开始。我可以使用第二个脚本,用一个特定的标签标记收件箱中的未读线程。然后,第一个脚本将仅使用此标签标记“已读”存档消息(而不是所有存档消息)。
马拉巴巴

2
这也有一个小错误。如果您在脚本有机会运行之前存档了一条消息,并且一条新消息到达了同一线程,那么在脚本运行时,这两个消息都将被标记为已读。这是因为GmailApp.search返回整个线程,而不管线程中的邮件之一是否在收件箱中。
马拉巴巴

3

我设法使其与以下Google脚本一起使用
它与@AlEverett的答案是一样的,但是它从未标记为已完全跳过收件箱(来自过滤器等)的已读邮件。

不幸的是,如果您倾向于非常快速地存档消息(平均少于30秒),则对您不起作用。

/** Mark as read archived threads which were previously in the inbox (determined by the label "i"). **/
function cleanAndroidArchived(){
  markArchivedAsRead();
  labelInboxAsI();
}

function markArchivedAsRead() {
  var threads = GmailApp.search('in:unread label:i -label:inbox');
  var label = GmailApp.createLabel("i");
  label.removeFromThreads(threads);
  GmailApp.markThreadsRead(threads);
};

function labelInboxAsI() {
  var threads = GmailApp.search('in:unread label:inbox');
  var label = GmailApp.createLabel("i");
  label.addToThreads(threads);
};

2

我相信我已经解决了@BruceConnor的问题,需要等待脚本执行后才能工作。

  1. 我创建了一个新过滤器,用于查找收件箱中的所有内容
  2. 分配“ i”标签(由他的版本创建)

Gmail抱怨过滤器永远不会匹配任何内容,但是在这种情况下,它确实匹配了收件箱中所有传入的邮件。

结果是,所有新收到的邮件都会被该标签自动“存储”,然后在您单击“存档”时,脚本可以将收件箱列表与“ i”标签进行比较,知道哪些邮件刚刚被存档,然后仅将这些邮件标记为“读”。您不必等待存档,因为所有消息都已分配到存档“ i”队列中。

奖励:我还将新的“ i”标签设置为“隐藏在消息列表中”和“隐藏在标签列表中”,因此它根本不会显示。(单击新的“ i”标签旁边的小箭头,然后选择这些选项。)


1

@ al-e的答案有效,但是在注释中确实有一个小错误。我制作了解决该错误的脚本的不同版本,并且已经成功使用了几年。这是我正在使用的脚本:

function markArchivedAsRead() {
  var threads = GmailApp.search('label:unread -label:inbox');
  for (var i=0; i<threads.length; i++)
  {
    var messages = threads[i].getMessages();
    var markUnread = 1;
    for (var j=0; j<messages.length; j++)
    {
      if (messages[j].isInInbox())
        markUnread = 0;
    }
    if (markUnread)
      threads[i].markRead();
  }
};
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.