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

使用Google Apps Script无法在Gmail中读取.eml附件求助

排查Google Apps Script无法识别Gmail中.eml附件的问题

问题场景

使用Google Apps Script自动化检索特定主题Gmail里的.eml附件,确认邮件确实包含.eml文件,但脚本定位不到,日志里完全没有.eml相关输出,怀疑是附件过滤或访问逻辑出了问题。

现有代码

function findSpecificEmail() {
  var threads = GmailApp.search('subject:"Your Email Subject Here"'); // Change the subject to match your email
  var messages = GmailApp.getMessagesForThreads(threads);
  
  for (var i = 0; i < messages.length; i++) {
    for (var j = 0; j < messages[i].length; j++) {
      var message = messages[i][j];
      var attachments = message.getAttachments();
      
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        Logger.log('Found attachment: ' + attachment.getName() + ' of type ' + attachment.getContentType());
        
        if (attachment.getName().endsWith('.eml')) {
          var emlContent = attachment.getDataAsString();
          Logger.log('EML Content: ' + emlContent);
        }
      }
    }
  }
}

排查&修复方案

针对你的问题,从几个常见坑点入手调整:

  • 文件名大小写/空格问题
    endsWith('.eml')是严格匹配大小写的,如果附件是.EML或者文件名末尾带空格,就会匹配失败。改成统一转小写并去除首尾空格后判断:

    if (attachment.getName().trim().toLowerCase().endsWith('.eml'))
    
  • 结合Content-Type判断
    部分.eml附件的Content-Type会标记为message/rfc822,只靠文件名判断可能漏检,建议同时校验类型:

    var isEml = attachment.getName().trim().toLowerCase().endsWith('.eml') || 
                attachment.getContentType() === 'message/rfc822';
    if (isEml) {
      // 处理逻辑
    }
    
  • 扩大Gmail搜索范围
    默认GmailApp.search()只搜索收件箱,如果目标邮件在归档、垃圾邮件或其他标签里,就搜不到。修改搜索语句加上in:anywhere:

    var threads = GmailApp.search('subject:"Your Email Subject Here" in:anywhere');
    
  • 增加更详细的日志
    在遍历消息时记录邮件ID,方便后续单独测试某一封邮件:

    Logger.log('Processing message ID: ' + message.getId());
    

修复后的完整代码

function findSpecificEmail() {
  // 扩大搜索范围到所有邮件位置,替换为你的目标主题
  var threads = GmailApp.search('subject:"Your Email Subject Here" in:anywhere'); 
  var messages = GmailApp.getMessagesForThreads(threads);
  
  for (var i = 0; i < messages.length; i++) {
    for (var j = 0; j < messages[i].length; j++) {
      var message = messages[i][j];
      Logger.log('Processing message ID: ' + message.getId());
      var attachments = message.getAttachments();
      
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        var attachName = attachment.getName().trim();
        var attachType = attachment.getContentType();
        Logger.log('Found attachment: ' + attachName + ' | Type: ' + attachType);
        
        // 同时校验文件名和Content-Type
        var isEml = attachName.toLowerCase().endsWith('.eml') || attachType === 'message/rfc822';
        if (isEml) {
          var emlContent = attachment.getDataAsString();
          Logger.log('=== EML Content Start ===');
          Logger.log(emlContent);
          Logger.log('=== EML Content End ===');
        }
      }
    }
  }
}

额外测试建议

  • 先找一封确定有.eml附件的邮件,复制它的ID,用GmailApp.getMessageById('邮件ID')单独获取这封邮件测试,排除搜索范围的问题
  • 查看脚本执行日志时,要选对对应的执行记录(比如最新的一次运行),避免看了旧日志
  • 确认脚本有Gmail的授权权限(第一次运行时会弹出授权请求,要允许)

内容的提问来源于stack exchange,提问作者MD ZUBAYER JAMIL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:58:19