Как исправить адреса электронной почты доменов с ошибками? - PullRequest
6 голосов
/ 30 августа 2011

Иногда пользователи неправильно пишут свой домен электронной почты и, следовательно, вводят неправильный адрес электронной почты. Например. abc@gmial.com, а не abc@gmail.com

Кто-нибудь думал об этом раньше? Кто-нибудь может подсказать, как справиться с такого рода ошибками?

Ответы [ 10 ]

12 голосов
/ 30 августа 2011

Кто-нибудь может подсказать, как справиться с такого рода ошибками?

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

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

8 голосов
/ 16 октября 2013

Не было, когда задавался этот вопрос, но я рекомендую MailCheck , который автоматически предлагает исправления для введенных писем. Он успешно используется крупными компаниями.

3 голосов
/ 30 августа 2011

По моему мнению, невозможно придумать общее решение для общего случая.

При этом наиболее распространенная опечатка заключается в том, чтобы поменять местами две буквы. Таким образом, вы можете проверить содержание символов для крупнейших сайтов Gmail, Yahoo и что у вас; Исходя из этого, предложите альтернативное написание, если оригинал не соответствует gmail и т. Д.

  • Не предполагайте, что пользователь виноват, предложите альтернативы, если он выглядит подозрительно по сравнению с обычными именами. Белый список был упомянут в другом ответе.
  • Используйте письма с подтверждением, если вам нужно знать, что вы можете получить ответ с этого адреса. Вы не можете предположить, что орфография, которую вы нашли, ошибочна, вот для чего нужны письма с подтверждением.
  • Сделать это очень ненавязчивым (на ум приходит ajax).
2 голосов
/ 27 апреля 2012

В наших формах мы используем комбинацию методов. В то время как плохие данные все еще могут проскальзывать, шансы значительно уменьшаются.

Сначала нужно сделать простое регулярное выражение форматирования, которое обычно доступно - просто убедитесь, что оно соответствует RFC. Если это не помогло, было бы полезно предложить пользователю форму подтверждения на данный момент, поскольку они могут обнаружить другие ошибки для вас при решении этой проблемы.

Следующая часть должна проверить часть домена TLD. Поскольку все TLD могут быть известны, их относительно легко сканировать на наличие орфографических ошибок с помощью некоторых тестов регулярных выражений. Просто храните список всех текущих TLD в таблице где-нибудь и обновляйте его время от времени по мере необходимости (учтите, этот список может быть сложным при работе с международными TLD. Если вы имеете дело только с трафиком в США, правила очень проще, и это то, что вы можете отфильтровать. Например, если вы продаете услугу, доступную только в США, было бы целесообразно отфильтровать международные электронные письма во время отправки формы. Мы, так что это работает для нас) .

В-третьих, нужно сделать что-то наподобие того, что предложил @npclaudiu - сканировать типичные ошибки в написании именных почтовых хостов (gmail, hotmail, yahoo и т. Д.) В доменной части, и, если обнаружен возможный попадание, предложить форму подтверждения для Пользователь. (Вы ввели кого-то@hptmail.com, вы имели в виду hotmail.com?)

Если вы пройдете эти шаги, вы можете выполнить поиск MX, предложенный @ symcbean.

Наконец, если все это удастся, есть метод (но я еще не проверял его) для связи с удаленным узлом SMTP, чтобы проверить, существует ли почтовый ящик. Мы собираемся начать тестировать это сами. Я нашел практическое руководство для таких здесь: http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

1 голос
/ 02 февраля 2016

Создайте список общих имен доменов электронной почты:

hotmail.com
gmail.com
googlemail.com
... etc

Когда пользователь вводит адрес электронной почты, введите имя домена введенного адреса и расстояние Левенштейна между списком.Если расстояние равно 1 (или может быть до 2), попросите пользователя подтвердить, что это адрес электронной почты, который они имели в виду.

1 голос
/ 30 августа 2011

Самое смешное, что URL существует http://www.gmial.com На самом деле вам будет очень трудно узнать, является ли это ошибкой или просто «странным» доменом. Посмотрите на API Google, потому что, когда вы вводите что-то неправильное в Google, они предлагают вам "вы имели в виду ...."

удачи

Арно

0 голосов
/ 30 августа 2011

Попытка автоматизировать исправление неверных данных - очень опасная практика. В конечном счете, только пользователь может предоставить правильные данные. Однако существуют строгие правила форматирования адреса электронной почты - проверка регулярных выражений может выполняться в javascript (или с использованием функций preg с тем же синтаксисом регулярных выражений) - но обратите внимание, что в Интернете существует множество плохих примеров регулярных выражений, требующих решения эта проблема.

Это должна быть довольно полная реализация валидатора RFDR28 ADDR_SPEC:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/gi

Однако на практике я нахожу это достаточным:

/^[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,22})$/gi

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

Это не доказывает, что именованный почтовый ящик существует на этом сайте, и что он принимает электронные письма - в конечном итоге вам нужно будет отправить электронное письмо на этот адрес, включая ссылку / пароль обратной ссылки, чтобы установить, является ли адрес электронной почты действительным .

Обновление

Хотя, как здесь говорится в ответе с наибольшим количеством голосов, лучший способ проверить ADDR_SPEC - это отправить токен по адресу, который будет отправлен обратно через Интернет, это не очень помогает, если данные не поступают из Человек, который контролирует почтовый ящик, и действие отсоединяется от основного взаимодействия, даже когда они делают. Еще одним соображением является то, что адрес электронной почты, который действителен сегодня, может быть не завтра.

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

0 голосов
/ 30 августа 2011

Вы можете создать список популярных доменов электронной почты (gmail.com, yahoo.com, ymail.com и т. Д.) В вашей базе данных и проверить адрес электронной почты, который пользователь вводит в этот список, и если Домен похож на один из этих доменов, вы должны показать предупреждение и позволить пользователю исправить его, если необходимо, а не автоматически исправить. И чтобы сравнить домен, введенный с доменами в вашем списке, вы можете использовать алгоритм, подобный тому, который используется в функции soundex в SQL Server, который сопоставляет слова на основе того, что одно слово звучит как второй.

Редактировать: вы можете найти подробнее о функции SOUNDEX здесь .

0 голосов
/ 30 августа 2011

Вы не можете предоставить эту функцию для автоматического исправления доменных имен электронной почты с ошибками, так как имя, которое вы считаете недействительным, будет действительным. Вы должны ожидать, что что-либо будет введено в качестве адреса электронной почты для доменного имени.

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

Надеюсь, это поможет.

0 голосов
/ 30 августа 2011

Как уже упоминалось ранее, не стоит автоматически предполагать, что кто-то набрал ошибку по электронной почте. Лучшим подходом было бы реализовать небольшую функцию javascript, которая проверяет, не был ли ошибочно введен домен электронной почты, и предупреждает пользователя, вместо того, чтобы предположить, что они были неправы с самого начала.

Дайте мне минуту, чтобы создать небольшой макет.

РЕДАКТИРОВАТЬ: ОК, так что, возможно, это было больше минуты. Взгляните на http://jsbin.com/iyaxuq/8/edit и убедитесь сами, как javascript может помочь предотвратить типичные ошибки при наборе текста. Попробуйте использовать электронные письма: test@gmail.cmo, another@yhaoo.com, loser@htomali.ocm (опечатка в hotmail) и me@aol.com.

Примечание: Я использовал ленивое регулярное выражение для проверки электронной почты. Не полагайтесь на это (или, в этом отношении, большинство регулярных выражений) для реального приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...