Есть ли способ определить, принадлежит ли адрес электронной почты существующей учетной записи? - PullRequest
2 голосов
/ 26 июля 2011

Существует способ определить, правильно ли сформирован идентификатор электронной почты. Пример abcqs@def.com - это правильно сформированный адрес электронной почты, но это может быть или не быть действительной учетной записью электронной почты.

  • Случай 1 Может быть, домен не существует (например, def.com здесь).
  • Случай 2 Если домен действителен, то, возможно, идентификатор не существует для домена (например, имя пользователя abcqs не существует для домена def).

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

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

Как этого добиться?

Ответы [ 6 ]

4 голосов
/ 26 июля 2011

Я думаю, что лучшим подходом является отправка электронного письма и подтверждение того, что пользователь активирует учетную запись.

  1. Пользователь заполняет свой адрес электронной почты
  2. Вы создаете ссылку для доступапользователем, передав ему какой-то параметр.Пример: http://your.domain.com/activate?account=984239048302948203482390
  3. Вы сохраняете электронную почту и всю информацию в своей базе данных с флагом (полем), указывающим, что он еще не активирован, и с кодом, который вы ему отправили
  4. Когда он нажмет на ссылку, вы получите этот параметр на своем сайте, в какой-то программе, которую вы написали.Таким образом, вы будете знать, что параметр 984239048302948203482390 был использован
  5. Вы проверяете, существует ли этот код в вашей базе данных, и активируете учетную запись.

И их он проверяет.

Вы можете проверять свою базу данных каждые x дней и удалять все старые записи, например, те, которые не были проверены более недели назад.

4 голосов
/ 26 июля 2011

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

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

3 голосов
/ 26 июля 2011

Как написал Ник, вы не можете знать наверняка, пока не отправите его.Тем не менее, вы МОЖЕТЕ проверять записи MX для данного доменного имени программно: http://stefanp.eu/blog/2009/09/dns-lookup-mx-records-java/.Это решает ваш случай-1

2 голосов
/ 26 июля 2011

Проверка писем обсуждалась много, много раз на SO. Короче говоря, НЕТ СПОСОБА узнать, существует ли адрес электронной почты / входящие. Некоторые серверы могут услужливо пересылать сообщения электронной почты, адресованные несуществующим почтовым ящикам, но многие / большинство не будут.

Кроме того, проверка регулярных выражений формата электронной почты также в значительной степени потеряна. Это компромисс между максимизацией охвата и минимизацией ложных срабатываний. Плюс, конечно, есть подлинные адреса, которые не соответствуют различным RFC. Поэтому я советую сделать простую проверку работоспособности: проверить наличие символа «@».

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

1 голос
/ 26 июля 2011

Если вы хотите очень точно определить адрес электронной почты, создайте уникальный номер и сохраните его в базе данных по адресу электронной почты.Затем отправьте письмо на адрес со ссылкой на ваш сайт.Ссылка должна иметь уникальный номер в качестве параметра.В электронном письме должно быть что-то вроде:

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

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

0 голосов
/ 26 июля 2011

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

Вот основная проверка домена:

public boolean isValidDomain(String domainName)
{
    try
    {
        InetAddress.getByName(domainName);
        return true;
    }
    catch (UnknownHostException e)
    {
        return false;
    }
}

А вот базовая проверка DNS-записи MX:

public boolean isValidEmailDomain(String domainName)
{
    try
    {
        DirContext ictx = new InitialDirContext();
        Attributes attrs = ictx.getAttributes("dns://" + dnsServer + "/" + domainName,
                                              new String[] { "MX" });
        Attribute attr = attrs.get("MX");
        return (attr != null);
    }
    catch (NamingException e)
    {
        return false;
    }
}

Где dnsServer необязательно использовать в некоторых средах, но должно быть в других . Возможно, вам придется поэкспериментировать там.

(Все упоминаемые классы находятся в java.net или javax.naming.)

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