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

求助:Google Apps Script中createTxtFiles函数无法正常运行

Google Apps Script 邮件转TXT附件发送问题修复

核心问题定位

主函数processEmails中调用了未定义的createTxtFiles函数,而实际实现该功能的函数名为createTxtFilesAndSendEmail,这是导致该模块无法工作的直接原因。

修正后的完整脚本

// 创建"Processed"标签(不存在则新建)
function createLabel() {
  var label = GmailApp.getUserLabelByName('Processed');
  if (!label) {
    GmailApp.createLabel('Processed');
  }
}

// 将目标邮件转为TXT附件并发送到指定邮箱
function createTxtFilesAndSendEmail() {
  var processedLabel = GmailApp.getUserLabelByName('Processed');
  if (!processedLabel) {
    processedLabel = GmailApp.createLabel('Processed');
  }
  var sentLabel = GmailApp.getUserLabelByName('SENT');
  var threads = GmailApp.search('label:inbox label:to_process');
  var recipient = 'abhotline@gmail.com';

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      // 优化标签判断逻辑:检查邮件是否包含SENT标签
      var hasSentLabel = message.getLabels().some(label => label.getName() === 'SENT');
      
      if (!message.isInTrash() && !message.isStarred() && !message.isUnread() && !message.isDraft() && !message.isImportant() && !hasSentLabel) {
        var fileName = message.getSubject() + '.txt';
        var content = message.getPlainBody();
        var attachment = Utilities.newBlob(content, 'text/plain', fileName);
        var emailSubject = 'Forwarded message: ' + message.getSubject();
        var emailBody = 'Please see attached file for message content.';
        
        try {
          MailApp.sendEmail(recipient, emailSubject, emailBody, {attachments: [attachment]});
          threads[i].addLabel(processedLabel);
        } catch (error) {
          Logger.log('Error sending email: ' + error);
        }
      }
    }
  }
}

// 移除已处理邮件的"to_process"标签
function removeLabel() {
  var toProcessLabel = GmailApp.getUserLabelByName('to_process');
  if (!toProcessLabel) return; // 避免标签不存在时报错
  var threads = toProcessLabel.getThreads();
  for (var i = 0; i < threads.length; i++) {
    threads[i].removeLabel(toProcessLabel);
  }
}

// 主函数:按顺序执行处理流程
function processEmails() {
  createLabel();
  createTxtFilesAndSendEmail(); // 修正函数调用名称
  removeLabel();
}

额外优化说明

  1. 修正了原代码中HTML转义的符号(&lt;→<、&amp;&amp;→&&),确保脚本可直接运行
  2. 优化了SENT标签的判断逻辑:原代码用includes直接比较Label对象可能失效,改用some方法匹配标签名称
  3. 在removeLabel函数中增加了标签存在性判断,避免标签不存在时抛出异常
  4. 简化了createTxtFilesAndSendEmail中的标签创建逻辑,直接用createLabel的返回值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:49