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 設定:
URL:https://api.emailverify.ai/v1/verify
方法:POST
Headers:
Authorization:Bearer YOUR_API_KEY
Content-Type:application/json
Body:{"email": "{{email}}"}按品質為訂閱者標籤
根據驗證結果新增標籤:
若 status = "valid" AND disposable = false
→ 新增標籤:「已驗證」
若 disposable = true
→ 新增標籤:「一次性」
→ 更新:行銷權限 = false
若 status = "invalid"
→ 取消訂閱成員
→ 新增標籤:「無效電子郵件」方法 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
- 進入 Bulk Verification
- 上傳您的 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(`Job 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(`Progress: ${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: ${valid.length}, Invalid: ${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('Invalid email address');
}
if (verification.result.disposable) {
throw new Error('Disposable emails not allowed');
}
// 新增到 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('Starting monthly list cleaning...');
const lists = await mailchimp.lists.getAllLists();
for (const list of lists.lists) {
await cleanList(list.id);
}
console.log('List cleaning complete');
});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));
}
}