Sprawdzanie SMTP przez telnet

Praktyczny przewodnik po ręcznym testowaniu serwera pocztowego. Dowiedz się, co robi każda komenda SMTP, jak odpowiada serwer i jak przeprowadzić pełną sesję weryfikacji za pomocą telnet lub openssl.

SMTP (Simple Mail Transfer Protocol) to tekstowy, wierszowy protokół. Oznacza to, że możesz rozmawiać z serwerem pocztowym bezpośrednio z terminala i odczytywać dokładnie to, co odpowiada — bez specjalnego oprogramowania. To najbardziej przejrzysty sposób sprawdzenia, czy skrzynka istnieje, czy serwer jest osiągalny i jak jest skonfigurowany.

1. Łączenie się z serwerem pocztowym

Najpierw znajdź serwer pocztowy (host MX) dla domeny, a następnie otwórz połączenie TCP do jego portu SMTP. Klasyczny port to 25. Porty zgłoszeniowe 587 i 2525 są używane z STARTTLS; port 465 to niejawny TLS (SMTPS).

Zwykłe połączenie (port 25):

telnet mail.example.com 25

Port STARTTLS (587 lub 25) — telnet nie obsługuje TLS, użyj openssl:

openssl s_client -connect mail.example.com:587 -starttls smtp -crlf

Port niejawnego TLS (465):

openssl s_client -connect mail.example.com:465 -crlf

Uwaga: wielu domowych i mobilnych dostawców internetu blokuje wychodzący port 25, aby zwalczać spam. Jeśli telnet ... 25 po prostu się zawiesza, to zwykle wina Twojego dostawcy, a nie serwera pocztowego. Testuj z serwera/VPS, na którym port 25 jest otwarty, lub użyj portów zgłoszeniowych.

2. Wyjaśnienie poleceń SMTP

Wpisujesz polecenia (wielkość liter nie ma znaczenia); serwer odpowiada 3-cyfrowym kodem i tekstem. Każde polecenie kończ klawiszem Enter (CRLF).

PolecenieCo robi
HELO domainPrzestarzałe powitanie. Identyfikuje łączący się host po nazwie. Serwer odpowiada 250.
EHLO domainNowoczesne powitanie (Extended HELO). Tak samo jak HELO, ale serwer dodatkowo wymienia obsługiwane rozszerzenia (STARTTLS, AUTH, SIZE, PIPELINING…).
MAIL FROM:<addr>Rozpoczyna nową wiadomość i ustawia nadawcę koperty (“ścieżkę zwrotną”). Odpowiedź 250, jeśli zaakceptowano.
RCPT TO:<addr>Kluczowe polecenie weryfikacji. Prosi serwer o przyjęcie odbiorcy. 250 = skrzynka jest akceptowana; 550 = brak takiego użytkownika; 4xx = spróbuj później (np. greylisting).
DATARozpoczyna treść wiadomości. Serwer odpowiada 354; wysyłasz nagłówki + treść i kończysz pojedynczą kropką . w osobnym wierszu. (W ramach weryfikacji nigdy nie dochodzi do tego kroku.)
RSETResetuje bieżącą transakcję (zapomina MAIL FROM / RCPT TO) bez zamykania połączenia.
VRFY userProsi serwer o weryfikację nazwy użytkownika/adresu. Stworzone dokładnie do tego celu, ale dziś niemal zawsze wyłączone (zwraca 252 lub 502), ponieważ ujawnia prawidłowe adresy spamerom.
EXPN listProsi serwer o rozwinięcie listy mailingowej do jej członków. Podobnie jak VRFY, wyłączone niemal wszędzie z tego samego powodu prywatności.
STARTTLSPodnosi zwykłe połączenie do szyfrowanego TLS (na portach 25/587). Oferowane tylko, jeśli zostało wymienione w odpowiedzi EHLO.
AUTH LOGIN / PLAINUwierzytelnia użytkownika (potrzebne do wysyłania poczty przez porty zgłoszeniowe, nie do weryfikacji).
NOOPNic nie robi; serwer odpowiada 250. Przydatne do podtrzymywania połączenia lub testowania reakcji.
HELPProsi serwer o wyświetlenie listy obsługiwanych poleceń.
QUITGrzecznie kończy sesję. Serwer odpowiada 221 i zamyka połączenie.

3. Kody odpowiedzi

Pierwsza cyfra informuje o kategorii, dzięki czemu możesz odczytać każdą odpowiedź, nawet jeśli nie znasz dokładnego kodu:

  • 2xx — sukces (polecenie zaakceptowane).
  • 3xx — pośrednie, serwer oczekuje dalszych danych (np. 354 po DATA).
  • 4xx — tymczasowa awaria: spróbuj ponownie później. Adres nadal może być prawidłowy.
  • 5xx — trwała awaria: polecenie lub adres zostały odrzucone.
KodZnaczenie
220Usługa gotowa (baner powitalny).
221Zamykanie połączenia (odpowiedź na QUIT).
250OK — polecenie zaakceptowane (odpowiedź, na którą czekasz po RCPT TO).
251 / 252Użytkownik nie jest lokalny, ale wiadomość zostanie przekazana / nie można zweryfikować, ale serwer spróbuje dostarczyć.
354Rozpocznij wysyłanie treści wiadomości (po DATA).
421Usługa niedostępna, zamykanie — często ograniczanie przepustowości (rate-limiting).
450 / 451 / 452Problem tymczasowy (skrzynka zajęta, błąd lokalny, mało miejsca). Często pojawia się tu greylisting.
502Polecenie nieobsługiwane (typowa odpowiedź na VRFY / EXPN).
550Skrzynka niedostępna / brak takiego użytkownika — adres nie istnieje.
551 / 552 / 553 / 554Użytkownik nie jest lokalny / przekroczony limit / nieprawidłowa nazwa skrzynki / transakcja nieudana.

4. Pełny przykład krok po kroku

Sprawdzamy, czy john@example.com istnieje. Wiersze, które wpisujesz, są oznaczone >; cała reszta pochodzi od serwera:

$ telnet mail.example.com 25 220 mail.example.com ESMTP ready > EHLO checkemail.test 250-mail.example.com Hello checkemail.test 250-STARTTLS 250-SIZE 52428800 250 PIPELINING > MAIL FROM:<probe@checkemail.test> 250 2.1.0 Ok > RCPT TO:<john@example.com> 250 2.1.5 Ok ← skrzynka ISTNIEJE > RSET 250 2.0.0 Ok > QUIT 221 2.0.0 Bye

Jeśli natomiast odbiorca nie istnieje, zobaczysz coś w rodzaju:

> RCPT TO:<nosuchuser@example.com> 550 5.1.1 <nosuchuser@example.com>: Recipient address rejected: User unknown

5. Czynniki sprawiające, że wyniki są niepewne

  • Greylisting — serwer celowo zwraca przy pierwszej próbie tymczasowy kod 4xx, prosząc o powrót później. 4xx nie oznacza, że adres jest nieprawidłowy.
  • Domeny catch-all — niektóre serwery akceptują każdego odbiorcę kodem 250 i rozstrzygają to później. Wtedy RCPT TO nie może udowodnić, że konkretna skrzynka istnieje. Aby wykryć catch-all, wypróbuj wyraźnie losowy adres: jeśli też zostanie zaakceptowany, domena jest typu catch-all.
  • Zabezpieczenia przed nadużyciami — serwery mogą opóźniać, ukrywać rzeczywisty status lub blokować powtarzające się próby z jednego adresu IP. Testuj uprzejmie i nie zasypuj serwera zapytaniami.
  • Wyłączone VRFY / EXPN — nie polegaj na nich; praktycznym sygnałem jest RCPT TO.

Chcesz, aby zrobiono to automatycznie, łącznie z wyszukaniem rekordów MX, wykryciem catch-all i czytelnym werdyktem? Użyj naszego weryfikatora adresów e-mail na stronie głównej.