【问题标题】:gmail script: Auto apply parent label to all child labelsgmail脚本:自动将父标签应用于所有子标签
【发布时间】:2020-02-08 10:29:41
【问题描述】:

我试图做到这样,每当我选择子标签时,脚本每天都会自动将父标签应用到同一封电子邮件。为此,我从 github 获得了以下代码:

THREAD_COUNT_LIMIT = 50

function IsSoftLabel( str ) 
{
  var suffix = '-';
  return str.indexOf( suffix, str.length - suffix.length ) !== -1;
}

function ApplyHierarchicalLabels() 
{
  var userLabels = GmailApp.getUserLabels();
  var threadCount = 0;

  Logger.log( "Applying Gmail hierarchical labels" );

  for( var labelIndex = 0; labelIndex < userLabels.length; ++labelIndex )
  {
    var label = userLabels[ labelIndex ];
    var labelPath = label.getName().split( '/' );

    for( var pathIndex = labelPath.length; pathIndex > 1; --pathIndex )
    {
      if( threadCount > THREAD_COUNT_LIMIT )
        return;

      var childName = labelPath.slice( 0, pathIndex ).join( '/' );

      if( IsSoftLabel( childName ) ) 
        continue;

      var parentIndex = pathIndex;
      do 
      {
        --parentIndex;
        var parentName = labelPath.slice( 0, parentIndex ).join( '/' );
      } while( IsSoftLabel( parentName ) )

      var parentLabel = GmailApp.getUserLabelByName( parentName );
      if( !parentLabel )
        continue;

      var threads = GmailApp.search( "label:" + childName + " -label:" + parentName, 0, THREAD_COUNT_LIMIT );

      for( var threadIndex = 0; threadIndex < threads.length; ++threadIndex )
      {
        var thread = threads[ threadIndex ];

        thread.addLabel( parentLabel );
        ++threadCount;

        var subject = thread.getFirstMessageSubject();
        Logger.log( "Added label '" + parentName + "' to thread: " + subject.substring( 0, 32 ) + ( subject.length > 32 ? "..." : "" ) ); 
      }
    }
  }    

  Logger.log( "Applied labels over " + threadCount + " thread(s)" );
}

但是,当我执行它时,它说当我的电子邮件没有改变时它运行成功。请帮忙,因为我没有 javascript 的背景。

【问题讨论】:

  • 我认为您的 c++ 背景应该足够好。
  • 是的。解决了。​​
  • 快速问题:是否可以使此脚本仅适用于单个父标签的子级?例如。我有各种标记为“X/Y”的电子邮件,我想同时标记为“X”和“X/Y”,但我也有一些标记为“A/B”的电子邮件我不想要要触摸的脚本。有什么指点吗?

标签: google-apps-script gmail gmail-api


【解决方案1】:

脚本仅针对我的 50 封电子邮件运行。为了让它在我所有的电子邮件上运行,我只需要添加一个基于时间的触发器来每分钟运行一次脚本,直到我的所有电子邮件都被正确标记。剧本没有错。

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多