Mailchimp
Email checker for Mailchimp. Clean your email list before sending campaigns.
使用 EmailVerify 验证订阅者邮箱,保持 Mailchimp 列表清洁,提高送达率,降低成本。
为什么要验证 Mailchimp 列表?
| 问题 | 影响 | 解决方案 |
|---|---|---|
| 无效邮箱 | 高退信率 | 发送前验证 |
| 一次性邮箱 | 低参与度 | 注册时过滤 |
| 过期列表 | 损害声誉 | 定期清理 |
| 垃圾邮件陷阱 | 黑名单风险 | 识别风险地址 |
集成方式
| 方式 | 应用场景 | 自动化程度 |
|---|---|---|
| API 集成 | 实时验证 | 完全自动化 |
| Zapier | 无代码自动化 | 完全自动化 |
| 导出/导入 | 批量列表清理 | 手动操作 |
| Webhook | 新订阅者验证 | 完全自动化 |
方式 1:Zapier 集成(推荐)
自动验证 Mailchimp 订阅者的最简单方式。
新订阅者验证
触发器:Mailchimp → 新订阅者
↓
动作:EmailVerify → 验证邮箱
↓
过滤器:基于验证结果
↓
动作:Mailchimp → 更新订阅者 / 取消订阅设置步骤:
- 在 Zapier 中创建新的 Zap
- 触发器:Mailchimp - 新订阅者
- 动作:Webhooks - POST 到
https://api.emailverify.ai/v1/verify - 过滤器:仅在 status = "valid" 时继续
- 动作: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 导出
- 前往 Audience → All contacts
- 点击 Export Audience
- 下载 CSV 文件
步骤 2:使用 EmailVerify 验证
使用控制台:
- 登录 EmailVerify
- 前往 批量验证
- 上传您的 CSV 文件
- 等待处理完成
- 下载结果
使用 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;
}导入步骤:
- 前往 Audience → Import contacts
- 上传 CSV 文件
- 映射字段:Email Address 和 Tags
- 选择 Update existing contacts
- 完成导入
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_based | info@, support@ | 考虑排除 |
needs_reverify | 上次验证超过 90 天 | 重新验证 |
5. 监控指标
实施后跟踪这些指标:
- 退信率:应显著下降
- 打开率:应提升
- 送达率评分:应增加
- 列表增长质量:跟踪已验证与未验证的注册数
成本节省计算器
估算列表清理的节省成本:
| 指标 | 清理前 | 清理后 |
|---|---|---|
| 列表大小 | 100,000 | 85,000 |
| 无效邮箱 | 15% | 低于 1% |
| 退信率 | 8% | 低于 2% |
| 每月 ESP 成本 | $250 | $212 |
| 年度节省 | - | $456 |
更小、更干净的列表通常具有更高的参与率,从而提高您的发件人声誉和送达率。
故障排除
清理后退信率仍然很高
- 验证清理过程是否成功完成
- 检查是否有最近添加的未验证订阅者
- 重新验证显示为有效但仍在退信的邮箱
标签未应用
- 验证 API 权限包含标签管理
- 检查订阅者状态(已归档的成员无法被标记)
- 确保标签名称不超过字符限制
速率限制
Mailchimp 和 EmailVerify 都有速率限制:
| 服务 | 限制 |
|---|---|
| Mailchimp Marketing API | 10 请求/秒 |
| EmailVerify | 根据套餐 |
为批量操作实施延迟:
async function processWithDelay(items, processFn, delayMs = 100) {
for (const item of items) {
await processFn(item);
await new Promise((r) => setTimeout(r, delayMs));
}
}