18 июля 2011

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

   Проверить корректность адреса электронной почты очень просто (не только синтаксис, но и его реальное существование). Для этого можно воспользоваться компонентой clEmailValidator из библиотеки Clever Internet Suite. Напишем с ее использованием простую функцию:

Function ValidateMail(const sAddress: String): Boolean;
Var
  clEV: TclEmailValidator;
begin
  clEV := TclEmailValidator.Create(nil);
  Try
    clEV.ValidationLevel := vlMailbox;
    clEV.DnsServer := '8.8.8.8';
    Result := clEV.Validate(sAddress) = vrMailboxOk
  Finally
     clEV.Free;
  End;
end;

Я задал всего лишь два свойства clEmailValidator (остальные можно пропустить). Первое и основное, это ValidationLevel - метод (уровень) проверки правильности адреса, их пять:
  1. vlBlacklist - проверка на вхождение адреса в ваш "чёрный список" (чёрный список хранится у clEmailValidator в свойстве BlackList типа TStrings);
  2. vlSyntax - проверка синтаксиса (проверяется при помощи шаблона RegEx);
  3. vlDomain - проверка существования домена (проверяется запросом DNS-информации для почтового домена);
  4. vlSmtp - проверка доступности почтового сервера (проверяется попыткой установления SMTP-соединения с хостом, указанным в MX-записи DNS);
  5. vlMailbox - проверка существования почтового ящика (проверяется попыткой отправить SMTP-запрос почтовому серверу с указанием проверяемого адреса в поле "RCPT TO").
   Я расположил эти значения в списке по очереди (в порядке) выполнения. Т.е. если вы хотите проверить существование домена, то clEmailValidator выполнит проверки нижнего уровня - сначала на вхождение в чёрный список, потом проверку синтаксиса адреса, а уж затем проверку существования домена.
   Проверка корректности с уровнем vlDomain и выше требует активного internet-подключения и у clEmailValidator необходимо задать значение свойству DnsServer. DnsServer - это IP-адрес name-сервера вашего internet-провайдера. В примере выше я использовал адрес Google Public DNS.
   При желании для уровня vlSmtp (и выше) можно задать имя которое используется в команде "SMTP HELO" (свойство HostName). А для уровня vlMailbox можно задать еще и адрес электронной почты, который используется в SMTP-запросе свойство EmailFrom). Я написал "при желании", т.к. у меня проверка корректности работает и без них.
   Метод Validate возвращает уровень, до которого проверка адреса электронной почты выполнилась корректно (vrBlacklistOk, vrSyntaxOk, vrDomainOk, vrSmtpOk, vrMailboxOk) или, если вы совсем ерунду подсунули clEmailValidator, то "vrInvalid".

Комментариев нет:

Отправить комментарий