You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Gmail转PDF脚本添加当日邮件筛选功能

优化Gmail转PDF脚本:只处理当日邮件

我写了个每小时自动运行的脚本,功能是搜索主题为“xxxx”的邮件,提取内容转成PDF存入指定文件夹,同名文件直接覆盖。现在想加个筛选逻辑,只处理当天的邮件,提升脚本运行效率。

原脚本代码:

function saveGmailAsPDF2() {

  var gmailLabels  = 'xxxxx';
  var driveFolder  = DriveApp.getFolderById("folder url");
  var threads = GmailApp.search("subject:" + gmailLabels,0,20);

  if (threads.length > 0) {

  /* Google Drive folder where the Files would be saved */
  var folders = DriveApp.getFoldersByName(driveFolder);
  var folder = folders.hasNext() ?
  folders.next() : DriveApp.createFolder(driveFolder);

  /* Gmail Label that contains the queue */
  var label = GmailApp.getUserLabelByName(gmailLabels) ?
  GmailApp.getUserLabelByName(gmailLabels) : GmailApp.createLabel(driveFolder);

  for (var t=0; t<threads.length; t++) {

  threads[t].removeLabel(label);
  var msgs = threads[t].getMessages();

  var html = "";

  var subject = threads[t].getFirstMessageSubject();

  var previousdoc = driveFolder.getFilesByName(subject + ".pdf"); //gets name of csv, if exists in drive then move to trash before creating new file
  if (previousdoc.hasNext()) {
  previousdoc.next().setTrashed(true);}

  /* Append all the threads in a message in an HTML document */
  for (var m=0; m<msgs.length; m++) {

  var msg = msgs[m];

  html += "From: " + msg.getFrom() + "<br />";
  html += "To: " + msg.getTo() + "<br />";
  html += "Date: " + msg.getDate() + "<br />";
  html += "Subject: " + msg.getSubject() + "<br />";
  html += "<hr />";
  html += msg.getBody().replace(/<img[^>]*>/g,"");
  html += "<hr />";}

  /* Convert the Email Thread into a PDF File */

  var tempFile = DriveApp.createFile("temp.html", html, "text/html");
  folder.createFile(tempFile.getAs("application/pdf")).setName(subject + ".pdf");
  tempFile.setTrashed(true);}}}

修改后的脚本

function saveGmailAsPDF2() {
  var gmailLabels = 'xxxxx';
  var driveFolder = DriveApp.getFolderById("folder url");
  
  // 生成当日0点的日期,用来筛选当天的邮件
  var today = new Date();
  var startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate());
  // 转成Gmail搜索支持的日期格式:yyyy/mm/dd
  var startDate = Utilities.formatDate(startOfDay, Session.getScriptTimeZone(), "yyyy/MM/dd");
  
  // 搜索时直接加上当日筛选条件,只捞当天的目标邮件
  var searchQuery = "subject:" + gmailLabels + " after:" + startDate;
  var threads = GmailApp.search(searchQuery, 0, 20);

  if (threads.length > 0) {
    // 直接用已经通过ID获取的文件夹,不用再查一遍
    var folder = driveFolder;

    // 获取或创建目标标签
    var label = GmailApp.getUserLabelByName(gmailLabels) || GmailApp.createLabel(gmailLabels);

    for (var t = 0; t < threads.length; t++) {
      threads[t].removeLabel(label);
      var msgs = threads[t].getMessages();
      var html = "";
      var subject = threads[t].getFirstMessageSubject();

      // 删除已存在的同名PDF
      var previousdoc = driveFolder.getFilesByName(subject + ".pdf");
      if (previousdoc.hasNext()) {
        previousdoc.next().setTrashed(true);
      }

      // 把邮件内容拼进HTML里
      for (var m = 0; m < msgs.length; m++) {
        var msg = msgs[m];
        html += "From: " + msg.getFrom() + "<br />";
        html += "To: " + msg.getTo() + "<br />";
        html += "Date: " + msg.getDate() + "<br />";
        html += "Subject: " + msg.getSubject() + "<br />";
        html += "<hr />";
        html += msg.getBody().replace(/<img[^>]*>/g, "");
        html += "<hr />";
      }

      // 转成PDF并存档
      var tempFile = DriveApp.createFile("temp.html", html, "text/html");
      folder.createFile(tempFile.getAs("application/pdf")).setName(subject + ".pdf");
      tempFile.setTrashed(true);
    }
  }
}

关键修改说明

  • 提前过滤非当日邮件:在Gmail搜索时就用after:yyyy/mm/dd限定只查当天0点之后的邮件,从源头减少需要处理的线程数,比拿到所有线程再筛选高效得多。
  • 修复文件夹逻辑错误:原代码里driveFolder已经是通过ID获取的文件夹对象,没必要再用getFoldersByName查找,直接用即可。
  • 简化代码写法:用||替换了冗余的三元运算符,代码更清爽。

内容的提问来源于stack exchange,提问作者Alexasks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:18:24