EmailVerify LogoEmailVerify

Mailchimp

Email checker for Mailchimp. Clean your email list before sending campaigns.

使用 EmailVerify 验证订阅者邮箱,保持 Mailchimp 列表清洁,提高送达率,降低成本。

为什么要验证 Mailchimp 列表?

问题影响解决方案
无效邮箱高退信率发送前验证
一次性邮箱低参与度注册时过滤
过期列表损害声誉定期清理
垃圾邮件陷阱黑名单风险识别风险地址

集成方式

方式应用场景自动化程度
API 集成实时验证完全自动化
Zapier无代码自动化完全自动化
导出/导入批量列表清理手动操作
Webhook新订阅者验证完全自动化

方式 1:Zapier 集成(推荐)

自动验证 Mailchimp 订阅者的最简单方式。

新订阅者验证

触发器:Mailchimp → 新订阅者

动作:EmailVerify → 验证邮箱

过滤器:基于验证结果

动作:Mailchimp → 更新订阅者 / 取消订阅

设置步骤:

  1. 在 Zapier 中创建新的 Zap
  2. 触发器:Mailchimp - 新订阅者
  3. 动作:Webhooks - POST 到 https://api.emailverify.ai/v1/verify
  4. 过滤器:仅在 status = "valid" 时继续
  5. 动作:Mailchimp - 使用标签更新订阅者

配置:

Webhook Settings:
  URL: https://api.emailverify.ai/v1/verify
  Method: POST
  Headers:
    Authorization: Bearer YOUR_API_KEY
    Content-Type: application/json
  Body: {"email": "{{email}}"}

根据质量标记订阅者

根据验证结果添加标签:

如果 status = "valid" 且 disposable = false
  → 添加标签:"verified"

如果 disposable = true
  → 添加标签:"disposable"
  → 更新:Marketing permissions = false

如果 status = "invalid"
  → 取消订阅成员
  → 添加标签:"invalid_email"

方式 2:直接 API 集成

对于自定义应用程序,直接集成两个 API。

Node.js 示例

const mailchimp = require('@mailchimp/mailchimp_marketing');
const { EmailVerify } = require('@emailverify/node');

// 初始化客户端
mailchimp.setConfig({
  apiKey: process.env.MAILCHIMP_API_KEY,
  server: 'us1', // 您的服务器前缀
});

const emailVerify = new EmailVerify({
  apiKey: process.env.EMAILVERIFY_API_KEY,
});

// 验证订阅者
async function verifySubscriber(listId, email) {
  // 获取验证结果
  const result = await emailVerify.verify(email);

  // 获取订阅者哈希(小写邮箱的 MD5)
  const subscriberHash = crypto
    .createHash('md5')
    .update(email.toLowerCase())
    .digest('hex');

  // 根据结果更新订阅者
  if (result.status === 'invalid') {
    // 取消无效邮箱的订阅
    await mailchimp.lists.updateListMember(listId, subscriberHash, {
      status: 'unsubscribed',
    });

    // 添加标签
    await mailchimp.lists.updateListMemberTags(listId, subscriberHash, {
      tags: [{ name: 'invalid_email', status: 'active' }],
    });
  } else if (result.status === 'valid') {
    // 标记为已验证
    const tags = [{ name: 'verified', status: 'active' }];

    if (result.result.disposable) {
      tags.push({ name: 'disposable', status: 'active' });
    }

    await mailchimp.lists.updateListMemberTags(listId, subscriberHash, { tags });
  }

  return result;
}

Python 示例

import mailchimp_marketing as mailchimp
from emailverify import Client as EmailVerify
import hashlib
import os

# 初始化客户端
mailchimp_client = mailchimp.Client()
mailchimp_client.set_config({
    "api_key": os.environ["MAILCHIMP_API_KEY"],
    "server": "us1"
})

bv_client = EmailVerify(api_key=os.environ["EMAILVERIFY_API_KEY"])

def verify_subscriber(list_id: str, email: str):
    # 验证邮箱
    result = bv_client.verify(email)

    # 获取订阅者哈希
    subscriber_hash = hashlib.md5(email.lower().encode()).hexdigest()

    if result.status == "invalid":
        # 取消无效邮箱的订阅
        mailchimp_client.lists.update_list_member(
            list_id,
            subscriber_hash,
            {"status": "unsubscribed"}
        )

        # 添加标签
        mailchimp_client.lists.update_list_member_tags(
            list_id,
            subscriber_hash,
            {"tags": [{"name": "invalid_email", "status": "active"}]}
        )

    elif result.status == "valid":
        tags = [{"name": "verified", "status": "active"}]

        if result.result.disposable:
            tags.append({"name": "disposable", "status": "active"})

        mailchimp_client.lists.update_list_member_tags(
            list_id,
            subscriber_hash,
            {"tags": tags}
        )

    return result


# 批量验证整个列表
def clean_list(list_id: str):
    # 获取所有订阅者
    members = mailchimp_client.lists.get_list_members_info(
        list_id,
        count=1000,
        status="subscribed"
    )

    results = {"valid": 0, "invalid": 0, "unknown": 0}

    for member in members["members"]:
        result = verify_subscriber(list_id, member["email_address"])
        results[result.status] = results.get(result.status, 0) + 1

    return results

方式 3:批量列表清理

对于大型列表,导出后使用 EmailVerify 的批量验证。

步骤 1:从 Mailchimp 导出

  1. 前往 AudienceAll contacts
  2. 点击 Export Audience
  3. 下载 CSV 文件

步骤 2:使用 EmailVerify 验证

使用控制台:

  1. 登录 EmailVerify
  2. 前往 批量验证
  3. 上传您的 CSV 文件
  4. 等待处理完成
  5. 下载结果

使用 API:

const fs = require('fs');
const { EmailVerify } = require('@emailverify/node');

const client = new EmailVerify({
  apiKey: process.env.EMAILVERIFY_API_KEY,
});

async function cleanMailchimpExport(csvPath) {
  // 读取 CSV 并提取邮箱
  const csv = fs.readFileSync(csvPath, 'utf-8');
  const lines = csv.split('\n');
  const emails = lines
    .slice(1) // 跳过标题行
    .map((line) => line.split(',')[0]) // 第一列是邮箱
    .filter((email) => email);

  // 提交批量任务
  const job = await client.verifyBulk(emails);
  console.log(`任务 ID: ${job.job_id}`);

  // 等待完成(轮询或使用 webhook)
  let status;
  do {
    await new Promise((r) => setTimeout(r, 10000)); // 等待 10 秒
    status = await client.getBulkJobStatus(job.job_id);
    console.log(`进度: ${status.progress_percent}%`);
  } while (status.status !== 'completed');

  // 获取结果
  const results = await client.getBulkJobResults(job.job_id);

  // 按状态分类
  const valid = results.results.filter((r) => r.status === 'valid');
  const invalid = results.results.filter((r) => r.status === 'invalid');

  console.log(`有效: ${valid.length}, 无效: ${invalid.length}`);

  return { valid, invalid };
}

步骤 3:导入结果

创建用于 Mailchimp 导入的 CSV:

function createMailchimpImportCSV(verificationResults) {
  const header = 'Email Address,Tags\n';

  const validRows = verificationResults.valid
    .map((r) => {
      const tags = ['verified'];
      if (r.result.disposable) tags.push('disposable');
      return `${r.email},"${tags.join(',')}"`;
    })
    .join('\n');

  const invalidRows = verificationResults.invalid
    .map((r) => `${r.email},"invalid_email,unsubscribe"`)
    .join('\n');

  return header + validRows + '\n' + invalidRows;
}

导入步骤:

  1. 前往 AudienceImport contacts
  2. 上传 CSV 文件
  3. 映射字段:Email Address 和 Tags
  4. 选择 Update existing contacts
  5. 完成导入

Webhook 集成

在验证完成时接收通知:

在 EmailVerify 中设置 Webhook

// 创建 webhook
const webhook = await client.webhooks.create({
  url: 'https://your-server.com/api/emailverify-webhook',
  events: ['verification.completed'],
  secret: 'your-webhook-secret',
});

处理 Webhook

// Express.js 端点
app.post('/api/emailverify-webhook', express.json(), async (req, res) => {
  const { event, data } = req.body;

  if (event === 'verification.completed') {
    const { email, status, result } = data;

    // 更新 Mailchimp 订阅者
    await updateMailchimpSubscriber(email, status, result);
  }

  res.status(200).send('OK');
});

async function updateMailchimpSubscriber(email, status, result) {
  const subscriberHash = crypto
    .createHash('md5')
    .update(email.toLowerCase())
    .digest('hex');

  const tags = [];

  if (status === 'valid') {
    tags.push({ name: 'verified', status: 'active' });
  } else if (status === 'invalid') {
    tags.push({ name: 'invalid_email', status: 'active' });
  }

  if (result.disposable) {
    tags.push({ name: 'disposable', status: 'active' });
  }

  await mailchimp.lists.updateListMemberTags(
    process.env.MAILCHIMP_LIST_ID,
    subscriberHash,
    { tags }
  );
}

最佳实践

1. 添加前验证

在添加到 Mailchimp 之前验证邮箱:

async function addSubscriber(listId, email, firstName, lastName) {
  // 先验证
  const verification = await emailVerify.verify(email);

  if (verification.status === 'invalid') {
    throw new Error('无效的邮箱地址');
  }

  if (verification.result.disposable) {
    throw new Error('不允许使用一次性邮箱');
  }

  // 添加到 Mailchimp
  await mailchimp.lists.addListMember(listId, {
    email_address: email,
    status: 'subscribed',
    merge_fields: {
      FNAME: firstName,
      LNAME: lastName,
    },
    tags: ['verified'],
  });
}

2. 定期清理列表

安排每月列表清理:

// Cron 任务示例(每月)
const cron = require('node-cron');

cron.schedule('0 0 1 * *', async () => {
  console.log('开始每月列表清理...');

  const lists = await mailchimp.lists.getAllLists();

  for (const list of lists.lists) {
    await cleanList(list.id);
  }

  console.log('列表清理完成');
});

3. 按邮箱质量分组

创建用于定向的分组:

高质量订阅者分组:

{
  "name": "High Quality Subscribers",
  "conditions": {
    "match": "all",
    "conditions": [
      {
        "field": "tag",
        "op": "contains",
        "value": "verified"
      },
      {
        "field": "tag",
        "op": "notcontain",
        "value": "disposable"
      }
    ]
  }
}

4. 有效使用标签

实施标签策略:

标签含义操作
verified邮箱有效包含在活动中
disposable临时邮箱限制发送
invalid_email邮箱退信从活动中排除
role_basedinfo@, support@考虑排除
needs_reverify上次验证超过 90 天重新验证

5. 监控指标

实施后跟踪这些指标:

  • 退信率:应显著下降
  • 打开率:应提升
  • 送达率评分:应增加
  • 列表增长质量:跟踪已验证与未验证的注册数

成本节省计算器

估算列表清理的节省成本:

指标清理前清理后
列表大小100,00085,000
无效邮箱15%低于 1%
退信率8%低于 2%
每月 ESP 成本$250$212
年度节省-$456

更小、更干净的列表通常具有更高的参与率,从而提高您的发件人声誉和送达率。

故障排除

清理后退信率仍然很高

  • 验证清理过程是否成功完成
  • 检查是否有最近添加的未验证订阅者
  • 重新验证显示为有效但仍在退信的邮箱

标签未应用

  • 验证 API 权限包含标签管理
  • 检查订阅者状态(已归档的成员无法被标记)
  • 确保标签名称不超过字符限制

速率限制

Mailchimp 和 EmailVerify 都有速率限制:

服务限制
Mailchimp Marketing API10 请求/秒
EmailVerify根据套餐

为批量操作实施延迟:

async function processWithDelay(items, processFn, delayMs = 100) {
  for (const item of items) {
    await processFn(item);
    await new Promise((r) => setTimeout(r, delayMs));
  }
}

相关资源

On this page