Mailchimp
Email checker for Mailchimp. Clean your email list before sending campaigns.
Mailchimp リストをクリーンに保ち、配信率を向上させ、EmailVerify で購読者のメールを検証してコストを削減しましょう。
Mailchimp リストを検証する理由
| 問題 | 影響 | 解決策 |
|---|---|---|
| 無効なメール | 高いバウンス率 | 送信前に検証 |
| 使い捨てメール | 低いエンゲージメント | サインアップ時にフィルタリング |
| 古いリスト | レピュテーションの損傷 | 定期的なクリーニング |
| スパムトラップ | ブラックリストのリスク | リスクのあるアドレスを特定 |
連携方法
| 方法 | ユースケース | 自動化 |
|---|---|---|
| API 連携 | リアルタイム検証 | 完全 |
| Zapier | ノーコード自動化 | 完全 |
| エクスポート/インポート | 一括リストクリーニング | 手動 |
| Webhook | 新規購読者検証 | 完全 |
方法 1:Zapier 連携(推奨)
Mailchimp 購読者を自動で検証する最も簡単な方法です。
新規購読者検証
トリガー: Mailchimp → 新しい購読者
↓
アクション: EmailVerify → メールを検証
↓
フィルター: 検証結果に基づく
↓
アクション: Mailchimp → 購読者を更新 / 購読解除セットアップ手順:
- Zapier で新しい Zap を作成
- トリガー:Mailchimp - New Subscriber
- アクション:Webhooks - POST to
https://api.emailverify.ai/v1/verify - フィルター:status = "valid" の場合のみ続行
- アクション:Mailchimp - Update Subscriber with tags
設定:
Webhook 設定:
URL: https://api.emailverify.ai/v1/verify
Method: POST
Headers:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Body: {"email": "{{email}}"}品質で購読者にタグ付け
検証結果に基づいてタグを追加:
status = "valid" AND 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 からエクスポート
- オーディエンス → すべてのコンタクト に移動
- オーディエンスをエクスポート をクリック
- 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;
}インポート手順:
- オーディエンス → コンタクトをインポート に移動
- CSV をアップロード
- フィールドをマッピング:Email Address と Tags
- 既存のコンタクトを更新 を選択
- インポートを完了
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": "高品質購読者",
"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. メトリクスを監視
実装後にこれらのメトリクスを追跡:
- バウンス率:大幅に減少するはず
- 開封率:向上するはず
- 配信スコア:増加するはず
- リスト成長品質:検証済み vs 未検証のサインアップを追跡
コスト削減計算機
リストクリーニングによる節約を見積もる:
| メトリクス | クリーニング前 | クリーニング後 |
|---|---|---|
| リストサイズ | 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));
}
}