Sprawdzanie czy email istnieje

Potrzeba weryfikacji czy skrzynka emailowa jest nie tylko poprawna w sensie składni, ale rzeczywiście istnieje wydaje się bardzo specyficzna. Zastosowanie takiego mechanizmu często jest jednak niezbędne i rozsądne zarówno z punktu widzenia poprawności funkcjonowania aplikacji jak i kosztów. Sprawdzenie, czy mail istnieje przyda się we wszystkich systemach newsletterowych czy też przy rejestracji użytkowników.

Do sprawdzenia czy wskazany odbiorca istnieje na podanym serwerze musimy wykonać kilka podstawowych kroków. Możemy też użyć gotowej biblioteki, którą opisuję poniżej. Jeżeli użytkownik podaje nam maila:

user@domain.com

w pierwszej kolejności musimy ustalić jakie serwery pocztowe obsługują domenę domain.com. Informację taką przechowują serwery DNS. W środowiskach linux odpytanie DNS o wskazane rekordy możemy wykonać przy pomocy host:

host -t MX domain.com

Mając listę serwerów MX wybieramy jeden z nich (co do zasady ten o najwyższym priorytecie) i próbujemy połączyć się do niego przy pomocy telnet po porcie 25

telnet mx1.domain.com 25

Następnie w obrębie środowiska telnet wykonujemy sprawdzenie czy odbiorca naszej wiadomości istnieje na serwerze do którego się podłaczyliśmy. Do takiego sprawdzenia musimy posiadać maila (najlepiej istniejącego), którego wskażemy jako nadawcę i podanego przez użytkownika maila, którego istnienie będziemy weryfikować.

Przy założeniu, że nasz mail to ver@domain1.com sprawdzenie będzie przebiegało w następujących krokach (pogrubionym tekstem wpisano komendy telnet, kursywą komentarze i wyjaśnienia):

  1. HELO domain1.com – w naszym przedstawieniu (HELO) używamy domeny maila nadawcy, ważne aby domena miała właściwe rekordy SPF, gdyż wiele serwerów SMTP weryfikuje tę informację,
  2. MAIL FROM:<ver@domain1.com> – wskazujemy nadawcę maila
  3. RCPT TO:<user@domain.com> – podajemy odbiorcę

Przy wydaniu każdej z powyższych komend otrzymamy odpowiedzi serwera SMTP. Dla sprawdzenia czy mail istnieje istotne jest otrzymanie w ostatnim kroku odpowiedzi o kodzie 250 (komunikaty odpowiedzi mogą się różnić w zależności od ustawień serwera), gdyż kod ten potwierdza istnienie odbiorcy na serwerze SMTP.

Jak widać sprawdzanie istnienia emaila nie jest trudne, ale ze względu na ilość kroków jego implementacja wymaga czasu. Aby przyspieszyć wdrażanie tej funkcjonalności w różnych systemach przygotowałem bibliotekę python3 – mailchecker. Biblioteka implementuje kilka metod umożliwiających dla wskazanego maila:

– odczytanie rekordów MX:

" " "
  sprawdzenie rekordow mx
" " "
from mailchecker import getmx

print(getmx(mail))

– sprawdzenie otwartych portów komunikacyjnych poczty dla wskazanego serwera MX:

" " "
  sprawdzenie otwartych portow
  weryfikowane porty: 25, 465, 143, 993
" " "
from mailchecker import getcontypes

print(getcontypes(mx))

– sprawdzenie czy email istnieje na serwerze pocztowym:

" " "
  sprawdzenie istnienia maila
" " "
from mailchecker import correctcheckmail

print(correctcheckmail(mailToCheck,verifyMail))

Biblioteka implementuje także metodę wykonującą wszystkie powyższe i zwracającą łącznie wszystkie uzyskane dane:

" " "
  kompleksowe sprawdzenie czy mail istnieje
" " "
from mailchecker import checkmail

print(checkmail(mailToCheck, verifyMail))

Bibliotekę można pobrać z mojego repozytorium GitHub jako pakiet .egg gotowy do instalacji oraz jako paczkę źródeł. Całość udostępniona jest w oparciu o licencję Apache 🙂

Podziel się:

Mikołaj Niedbała

I'm a Poland based IT administrator, linux administrator and IT engineer creating professional IT infrastructure solutions based on Linux and virtual environments.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *