CleanContact
← Назад в базу знаний

Нормализация email: единая каноническая форма адреса

Некоторые почтовые провайдеры считают несколько разных на вид адресов одним и тем же ящиком. Точка в адресе Gmail для Gmail не видна; дефис в адресе Яндекса для Яндекса — тот же символ, что и точка. CleanContact приводит каждый присланный адрес к единой канонической форме и возвращает её в поле normalized рядом с адресом, который был отправлен.

Что делает нормализация

  • Приводит весь адрес к нижнему регистру.
  • Заменяет известные алиасы доменов на канонический домен — например, googlemail.com становится gmail.com.
  • Для адреса gmail.com (после замены алиаса) убирает из локальной части все точки.
  • Для адреса yandex.ru (после замены алиаса) превращает каждый дефис в локальной части в точку.

Для всех остальных доменов нормализация только приводит адрес к нижнему регистру — локальная часть остаётся ровно такой, какой была отправлена. Поле присутствует в ответе всегда, даже если ничего не изменилось: для адреса, который уже был в канонической форме, normalized просто совпадает с адресом в нижнем регистре.

Пример

Адрес Gmail, набранный через алиас домена и с точками:

curl -H "X-API-Key: <ваш-ключ>" \
  "https://api.cleancontact.ru/validate?email=J.Ohn.Doe@GoogleMail.com"
{
  "value": "J.Ohn.Doe@GoogleMail.com",
  "normalized": "johndoe@gmail.com",
  "result": {
    "status": "Good",
    "detail": "Mailbox accepts mail"
  }
}

googlemail.com был заменён на gmail.com, и только после этого из локальной части убрали точки — порядок важен, так как правило про точки применяется к каноническому домену, а не к тому, что был введён. Адрес Яндекса ведёт себя так же, только с дефисами:

curl -H "X-API-Key: <ваш-ключ>" \
  "https://api.cleancontact.ru/validate?email=Ivan-Petrov@Yandex.ru"
{
  "value": "Ivan-Petrov@Yandex.ru",
  "normalized": "ivan.petrov@yandex.ru",
  "result": {
    "status": "Good",
    "detail": "Mailbox accepts mail"
  }
}

Что это даёт

  • Дедуплицируйте список по канонической форме, а не по сырой строке — j.ohn.doe@gmail.com и johndoe@gmail.com это один и тот же контакт, и именно normalized позволяет это увидеть.
  • Храните одну запись на адрес — используйте normalized в качестве ключа в базе вместо адреса, который пользователь случайно набрал, и повторные регистрации с одного адреса перестанут выглядеть новыми контактами.
  • Настраивать нечего — нормализация выполняется для каждого запроса по каждому ключу API без дополнительных затрат.

Нормализация — отдельный шаг от сигнала Gmail dot trick: normalized показывает каноническую форму адреса, который перед вами прямо сейчас, а gmailDotTrick — сообщает, встречались ли раньше несколько разных написаний этого же адреса.