EmailVerify LogoEmailVerify

Mailchimp

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

Mailchimp リストをクリーンに保ち、配信率を向上させ、EmailVerify で購読者のメールを検証してコストを削減しましょう。

Mailchimp リストを検証する理由

問題影響解決策
無効なメール高いバウンス率送信前に検証
使い捨てメール低いエンゲージメントサインアップ時にフィルタリング
古いリストレピュテーションの損傷定期的なクリーニング
スパムトラップブラックリストのリスクリスクのあるアドレスを特定

連携方法

方法ユースケース自動化
API 連携リアルタイム検証完全
Zapierノーコード自動化完全
エクスポート/インポート一括リストクリーニング手動
Webhook新規購読者検証完全

方法 1:Zapier 連携(推奨)

Mailchimp 購読者を自動で検証する最も簡単な方法です。

新規購読者検証

トリガー: Mailchimp → 新しい購読者

アクション: EmailVerify → メールを検証

フィルター: 検証結果に基づく

アクション: Mailchimp → 購読者を更新 / 購読解除

セットアップ手順:

  1. Zapier で新しい Zap を作成
  2. トリガー:Mailchimp - New Subscriber
  3. アクション:Webhooks - POST to https://api.emailverify.ai/v1/verify
  4. フィルター:status = "valid" の場合のみ続行
  5. アクション: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 からエクスポート

  1. オーディエンスすべてのコンタクト に移動
  2. オーディエンスをエクスポート をクリック
  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. オーディエンスコンタクトをインポート に移動
  2. CSV をアップロード
  3. フィールドをマッピング:Email Address と Tags
  4. 既存のコンタクトを更新 を選択
  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": "高品質購読者",
  "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. メトリクスを監視

実装後にこれらのメトリクスを追跡:

  • バウンス率:大幅に減少するはず
  • 開封率:向上するはず
  • 配信スコア:増加するはず
  • リスト成長品質:検証済み vs 未検証のサインアップを追跡

コスト削減計算機

リストクリーニングによる節約を見積もる:

メトリクスクリーニング前クリーニング後
リストサイズ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