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

如何用Google Apps Script验证谷歌表格中的邮箱有效性?

嘿,这个问题我之前帮不少人踩过坑——批量发信碰到无效邮箱确实闹心,Hunter API额度不够的话,咱们可以组合用这些方案,不用额外砸钱或者能满足基础需求:

1. 先做本地格式校验,过滤明显错误

首先用正则表达式把格式完全不对的邮箱先筛掉,比如没有@、域名没点、带特殊非法字符的。在Google Apps Script里写个简单的函数就行:

function isEmailFormatValid(email) {
  var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
}

虽然这个没法识别name@gmaial.com这种拼写错误的域名,但能先干掉一半明显的垃圾邮箱,比如namegmail.com或者name@.com这类。

2. 校验域名的MX记录

如果邮箱的域名连邮件交换(MX)记录都没有,那肯定收不到邮件。咱们可以用Apps Script的Net服务查询MX记录,过滤掉这类无效域名:

function hasValidMXRecord(email) {
  var domain = email.split('@')[1];
  if (!domain) return false;
  try {
    var mxRecords = Net.dns.resolve(domain, Net.Dns.Type.MX);
    return mxRecords.length > 0;
  } catch (e) {
    // 域名不存在或查询失败
    return false;
  }
}

比如name@totally-fake-domain.xyz这种,查不到MX记录直接标记无效,能帮你排除一批问题邮箱。

3. 用免费额度更高的邮箱验证API替代Hunter

有些API的免费版额度足够小批量使用,比如:

  • Abstract API 邮箱验证:每月免费1000次调用
  • Mailgun 邮箱验证:每月免费5000次(需要注册账号)
  • ZeroBounce 免费版:每月100次(适合超小批量)

拿Abstract API举例子,在Apps Script里调用的代码大概是这样:

function verifyEmailWithFreeAPI(email) {
  var apiKey = "你的免费API密钥"; // 去对应官网注册获取
  var url = `https://emailvalidation.abstractapi.com/v1/?api_key=${apiKey}&email=${encodeURIComponent(email)}`;
  try {
    var response = UrlFetchApp.fetch(url);
    var result = JSON.parse(response.getContentText());
    // 综合判断格式、MX记录、SMTP有效性
    return result.is_valid_format && result.is_mx_found && result.is_smtp_valid;
  } catch (e) {
    console.log("API调用失败:" + e.message);
    return false;
  }
}

这些API不仅能查格式和MX,还能模拟SMTP连接验证邮箱是否真实存在,比单纯的本地校验靠谱多了。

4. 发送测试邮件+跟踪退回邮件

如果上面的方法还是漏了一些(比如name@gmaial.com这种域名真实存在但邮箱不存在的),可以先给所有待发邮箱发一封测试邮件(主题标清楚是测试,比如「测试邮件:请忽略,仅用于验证邮箱有效性」),然后用Apps Script定期检查你的收件箱里的退回邮件,把对应的无效邮箱标记到表格里。

示例代码大概是这样:

function findBouncedEmails() {
  // 搜索最近7天的退回邮件
  var bouncedThreads = GmailApp.search("is:bounce newer_than:7d");
  var bouncedEmails = [];
  
  bouncedThreads.forEach(function(thread) {
    var messages = thread.getMessages();
    messages.forEach(function(msg) {
      // 解析退回邮件里的原收件人地址
      var headers = msg.getHeaders();
      var recipientHeader = headers.find(h => h.name === "X-Failed-Recipients" || h.name === "Original-Recipient");
      if (recipientHeader) {
        var email = recipientHeader.value.trim();
        if (!bouncedEmails.includes(email)) {
          bouncedEmails.push(email);
        }
      }
    });
  });
  
  // 把bouncedEmails里的邮箱标记到你的谷歌表格里
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("邮箱列表");
  var data = sheet.getDataRange().getValues();
  for (var i = 1; i < data.length; i++) { // 跳过表头
    if (bouncedEmails.includes(data[i][0])) {
      sheet.getRange(i+1, 2).setValue("无效(退回)"); // 假设第二列是状态列
    }
  }
}

你还可以给这个函数设置一个每日触发器,自动检查退回邮件,长期维护你的邮箱列表。

5. 如果你用Google Workspace:利用官方投递报告

如果是用Google Workspace账号发信,Google会提供详细的投递状态报告,你可以通过Admin SDK的API访问这些数据,直接提取无效邮箱的信息。需要先在Google Cloud Console启用Admin Directory服务,然后用Apps Script调用相关接口就行,这个适合企业级的批量发信场景。

总结一下最优流程

  1. 先用格式校验过滤明显错误
  2. 再用MX记录校验排除无邮件服务的域名
  3. 用免费API校验剩余邮箱(优先用额度高的)
  4. 发送测试邮件并自动跟踪退回,清理漏网之鱼

这样组合下来,既能最大程度减少无效发送,又不用依赖单一付费API,成本低还实用。

内容的提问来源于stack exchange,提问作者J. Ray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:36:48