Перейти к содержимому
Guide

Подтвердите адрес электронной почты, не отправляя ни одного сообщения

| 7 min read

Проверьте синтаксис электронной почты, записи MX и одноразовые домены с помощью трех вызовов API. Нет SMTP-соединения, нет письма для подтверждения, нет риска возврата. Бесплатный API проверки электронной почты.

Email inbox with verification badges
Photo by Stephen Phillips on Unsplash

Ваша форма регистрации собирает адрес электронной почты. Вы сохраняете его, отправляете приветственное сообщение и электронное письмо. подпрыгивает. Адрес оказался опечаткой. Или домена не существует. Или это был выброс @mailinator.com адрес, который умрет через десять минут. Теперь у тебя есть мусор запись в вашей базе данных, испорченная репутация отправителя и пользователь, который никогда не вернется.

Традиционное решение — отправка электронного письма с подтверждением: «Нажмите эту ссылку, чтобы подтвердить свой адрес». Это работает, но добавляет трения. Конверсия падает. И он не улавливает опечатку до тех пор, пока вы уже отправили сообщение на неверный адрес.

Вы можете подтвердить адрес электронной почты перед отправкой чего-либо. Три вызова API проверяют синтаксис, MX записи и одноразовые домены. Весь процесс занимает менее 200 мс и выявляет проблемы. которые являются причиной 90% сбоев в доставке электронной почты.

Три уровня проверки электронной почты

Каждый уровень выявляет разные классы плохих адресов электронной почты. Используйте их вместе для полного конвейер проверки электронной почты или выберите те, которые вам нужны.

  • Проверка синтаксиса. Соответствует ли адрес допустимому формату? Домен есть известная опечатка? /v1/email/validate конечная точка проверяет соответствие RFC 5322, обнаруживает ролевые адреса (admin@, support@), и предлагает исправления для распространенных ошибок в написании доменов, таких как gmial.com или hotmal.com.
  • Проверка записи MX. Может ли домен вообще получать электронную почту? /v1/email-mx/verify конечная точка запрашивает DNS для записей MX и возвращается к A записи. Если в домене нет почтового сервера, адрес недоступен; никаких повторных попыток исправлю это.
  • Одноразовое обнаружение электронной почты. Адрес взят из одноразового сервиса? /v1/disposable-email/check проверка конечных точек на более чем 700 известных одноразовых доменах и варианты совпадений с образцом. Он также указывает, является ли домен бесплатным провайдером (Gmail, Outlook), чтобы можно было различать личные и одноразовые адреса.

Проверьте синтаксис электронной почты и выявите опечатки

The /v1/email/validate конечная точка выполняет большую часть работы за один вызов. Это подтверждает формате, ищет записи MX, проверяет наличие одноразовых доменов и обнаруживает опечатки в популярных домены провайдера.

Ответ:

Электронная почта jamie@gmial.com имеет правильный синтаксис, но домен является опечаткой. API возвращает is_valid: false поскольку для него не существует записей MX gmial.com, и он предлагает исправленный адрес jamie@gmail.com. Показать это предложение в вашу регистрационную форму, и вы спасаете пользователя от мертвой учетной записи.

Проверьте записи MX, чтобы убедиться, что электронное письмо настоящее.

The /v1/email-mx/verify конечная точка ориентирована на DNS. Возвращает полный список MX записи с приоритетами и deliverable поле, которое сообщает вам, является ли домен может получать почту.

Ответ:

The deliverable поле возвращает одно из трех значений: "likely" (MX найдены записи), "unknown" (нет MX, но существует запись A, поэтому домен может принимать почту) или "unlikely" (без записей MX и A). Используйте это для записи MX проверка, когда вам нужны необработанные данные DNS.

Обнаружение одноразовых и одноразовых адресов

The /v1/disposable-email/check конечная точка идентифицирует временные службы электронной почты. Эти адреса работают минуты или часы, а затем перестают принимать почту.

Ответ:

The is_free Поле отделяет одноразовые домены от бесплатных провайдеров. Gmail адрес возвращается is_free: true и is_disposable: false. Майлинатор адрес возвращается is_disposable: true и is_free: false. Это различие имеет значение; блокировка всех бесплатных провайдеров приведет к блокировке большей части Интернета.

Создайте конвейер проверки в Node.js.

Объедините все три проверки в одну функцию. Этот конвейер выполняет каждую проверку последовательно. и короткое замыкание при первом сбое.

async function validateEmail(email) {
  const headers = { "Content-Type": "application/json" };
  const body = JSON.stringify({ email });

  // Step 1: Syntax validation + typo detection
  const syntaxRes = await fetch("https://api.botoi.com/v1/email/validate", {
    method: "POST", headers, body,
  });
  const syntax = await syntaxRes.json();

  if (!syntax.data.format_valid) {
    return { valid: false, reason: "Invalid email format" };
  }

  if (syntax.data.suggestion) {
    return {
      valid: false,
      reason: \`Did you mean \${syntax.data.suggestion}?\`,
    };
  }

  // Step 2: MX record verification
  const mxRes = await fetch("https://api.botoi.com/v1/email-mx/verify", {
    method: "POST", headers, body,
  });
  const mx = await mxRes.json();

  if (!mx.data.has_mx) {
    return { valid: false, reason: "Domain cannot receive email" };
  }

  // Step 3: Disposable email detection
  const dispRes = await fetch("https://api.botoi.com/v1/disposable-email/check", {
    method: "POST", headers, body,
  });
  const disp = await dispRes.json();

  if (disp.data.is_disposable) {
    return {
      valid: false,
      reason: \`Disposable email detected (\${disp.data.provider})\`,
    };
  }

  return { valid: true, reason: null };
}

// Usage
const result = await validateEmail("test@mailinator.com");
console.log(result);
// { valid: false, reason: "Disposable email detected (Mailinator)" }

Последовательный подход читается и завершается раньше. Если синтаксис неверен, вы пропускаете сеть требует MX и одноразовых чеков. Если вы предпочитаете скорость досрочному завершению, запустите все три параллельно:

async function validateEmail(email) {
  const headers = { "Content-Type": "application/json" };
  const body = JSON.stringify({ email });

  // Run all three checks in parallel
  const [syntaxRes, mxRes, dispRes] = await Promise.all([
    fetch("https://api.botoi.com/v1/email/validate", {
      method: "POST", headers, body,
    }),
    fetch("https://api.botoi.com/v1/email-mx/verify", {
      method: "POST", headers, body,
    }),
    fetch("https://api.botoi.com/v1/disposable-email/check", {
      method: "POST", headers, body,
    }),
  ]);

  const [syntax, mx, disp] = await Promise.all([
    syntaxRes.json(), mxRes.json(), dispRes.json(),
  ]);

  const errors = [];

  if (!syntax.data.format_valid) errors.push("Invalid format");
  if (syntax.data.suggestion) errors.push(\`Typo: try \${syntax.data.suggestion}\`);
  if (!mx.data.has_mx) errors.push("No MX records");
  if (disp.data.is_disposable) errors.push("Disposable domain");

  return {
    valid: errors.length === 0,
    errors,
    details: { syntax: syntax.data, mx: mx.data, disposable: disp.data },
  };
}

Параллельная версия запускает все три запроса одновременно, используя Promise.all. Общая задержка равна самому медленному запросу, а не сумме. В большинстве случаев все три завершить менее чем за 100 мс.

Конвейер проверки Python

Та же трехэтапная проверка в Python. В этом примере используется requests библиотека для ясности.

import requests

API_BASE = "https://api.botoi.com/v1"

def validate_email(email: str) -> dict:
    headers = {"Content-Type": "application/json"}
    payload = {"email": email}

    # Step 1: Syntax + typo check
    syntax = requests.post(
        f"{API_BASE}/email/validate", json=payload, headers=headers
    ).json()

    if not syntax["data"]["format_valid"]:
        return {"valid": False, "reason": "Invalid email format"}

    suggestion = syntax["data"].get("suggestion")
    if suggestion:
        return {"valid": False, "reason": f"Did you mean {suggestion}?"}

    # Step 2: MX record check
    mx = requests.post(
        f"{API_BASE}/email-mx/verify", json=payload, headers=headers
    ).json()

    if not mx["data"]["has_mx"]:
        return {"valid": False, "reason": "Domain cannot receive email"}

    # Step 3: Disposable check
    disp = requests.post(
        f"{API_BASE}/disposable-email/check", json=payload, headers=headers
    ).json()

    if disp["data"]["is_disposable"]:
        provider = disp["data"]["provider"]
        return {"valid": False, "reason": f"Disposable email ({provider})"}

    return {"valid": True, "reason": None}

# Usage
result = validate_email("jamie@gmial.com")
print(result)
# {'valid': False, 'reason': 'Did you mean jamie@gmail.com?'}

Когда проверять адреса электронной почты

Разные точки соприкосновения требуют разной глубины проверки. Вот где подходит каждая проверка.

Точка контакта Синтаксис MX-проверка Одноразовый Почему
Форма регистрации Да Да Да Выявляйте опечатки, мертвые домены и неиспользуемые учетные записи перед созданием записи.
Оформление заказа / оплата Да Да Необязательный Для квитанций нужен адрес доставки; одноразовый чек зависит от вашей политики возврата
Контактная форма Да Необязательный Нет Базовая проверка формата предотвращает очевидный мусор; Проверка MX является бонусом
Подписаться на рассылку Да Да Да Защищает репутацию отправителя; высокие показатели отказов заставят вас быть отмеченными ESP
Импорт лидов / CRM Да Да Да Очистка данных до того, как они попадут в ваш конвейер, экономит последующие затраты.
Внутренние инструменты Да Нет Нет Проверка синтаксиса выявляет ошибки ввода данных; внутренним пользователям доверяют

Ключевые моменты

  • Подтвердите перед сохранением. Каждое плохое письмо в вашей базе данных стоит вам: хранилища, неудачные отправки, обработка возвратов и ущерб репутации отправителя. Ловите проблемы в точке входа.
  • Обнаружение опечаток спасает пользователей. The /v1/email/validate конечная точка обнаруживает распространенные ошибки в написании доменов и возвращает предложение. Всплытие «Вы имели в виду Джейми@gmail.com?» предотвращает потерю пользователя.
  • Проверки MX выполняются быстро и бесплатно. DNS-запросы выполняются за миллисекунды. Есть нет причин их пропускать. Адрес без записей MX никогда не получит вашу электронную почту.
  • Одноразовое обнаружение защищает от злоупотреблений в ходе судебного разбирательства. Если вы предлагаете бесплатную пробную версию или план Freemium, одноразовое обнаружение электронной почты не позволяет одному и тому же человеку создавать неограниченное количество аккаунты с одноразовыми адресами.
  • Для запуска не требуется ключ API. Все три конечные точки работают анонимно на 5 запросов в минуту. Протестируйте весь конвейер без регистрации. Добавить Authorization: Bearer YOUR_KEY заголовок, когда вам нужна более высокая пропускная способность.
  • Параллельно запускайте проверки скорости. Три конечные точки независимы. С использованием Promise.all сокращает общую задержку до самого медленного отдельного запроса вместо сумма всех трёх.

Полная документация по всем трем конечным точкам находится в интерактивная документация по API. Каждая конечная точка принимает тело JSON с email поле и возвращает результаты в менее 100 мс из периферийной сети Cloudflare.

FAQ

Можете ли вы подтвердить адрес электронной почты, не отправляя электронное письмо?
Да. Вы можете проверить три вещи, ничего не отправляя: соответствует ли адрес допустимому синтаксису (RFC 5322), есть ли в домене записи MX, настроенные для получения почты, и принадлежит ли домен известному одноразовому поставщику электронной почты. Эти три проверки выявляют большинство плохих адресов во время регистрации.
Является ли API проверки электронной почты botoi бесплатным?
Да. Анонимный доступ возможен со скоростью 5 запросов в минуту с ограничением скорости по IP. Ни ключ API, ни регистрация, ни кредитная карта не требуются. Для более высокой пропускной способности платные планы начинаются с 9 долларов США в месяц и включают доступ ко всем более чем 150 конечным точкам API.
В чем разница между проверкой записи MX и проверкой SMTP?
Проверка записи MX проверяет, настроены ли в домене почтовые серверы для приема электронной почты. Это подтверждает, что домен в целом может получать почту. Проверка SMTP идет дальше: подключается к почтовому серверу и запрашивает, существует ли определенный почтовый ящик. Проверки MX выполняются быстро (менее 100 мс) и бесплатно. Проверки SMTP выполняются медленнее, могут блокироваться почтовыми серверами и могут вызывать ограничения скорости или пометки спама.
Насколько точно одноразовое обнаружение электронной почты?
Одноразовая конечная точка электронной почты botoi проверяет более 700 известных одноразовых доменов и использует сопоставление с шаблоном для обнаружения вариантов (домены, содержащие «temp», «trash», «throwaway» и т. д.). Он также различает одноразовые домены и бесплатные провайдеры, такие как Gmail или Outlook. Ни один список обнаружения не является полным на 100%, но он охватывает все широко используемые одноразовые сервисы.
Должен ли я проверять электронную почту на клиенте или на сервере?
Оба. Запустите базовую проверку формата на клиенте для мгновенной обратной связи. Запустите MX и одноразовые проверки на сервере перед записью в базу данных. Проверка на стороне клиента улучшает взаимодействие с пользователем; проверка на стороне сервера защищает ваши данные. Никогда не доверяйте только проверкам на стороне клиента, поскольку их можно обойти.

Начните разработку с botoi

150+ API-эндпоинтов для поиска, обработки текста, генерации изображений и утилит для разработчиков. Бесплатный тариф, без банковской карты.