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.
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.
Wpisujesz polecenia (wielkość liter nie ma znaczenia); serwer odpowiada 3-cyfrowym kodem i tekstem. Każde polecenie kończ klawiszem Enter (CRLF).
| Polecenie | Co robi |
|---|---|
HELO domain | Przestarzałe powitanie. Identyfikuje łączący się host po nazwie. Serwer odpowiada 250. |
EHLO domain | Nowoczesne 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). |
DATA | Rozpoczyna 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.) |
RSET | Resetuje bieżącą transakcję (zapomina MAIL FROM / RCPT TO) bez zamykania połączenia. |
VRFY user | Prosi 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 list | Prosi 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. |
STARTTLS | Podnosi zwykłe połączenie do szyfrowanego TLS (na portach 25/587). Oferowane tylko, jeśli zostało wymienione w odpowiedzi EHLO. |
AUTH LOGIN / PLAIN | Uwierzytelnia użytkownika (potrzebne do wysyłania poczty przez porty zgłoszeniowe, nie do weryfikacji). |
NOOP | Nic nie robi; serwer odpowiada 250. Przydatne do podtrzymywania połączenia lub testowania reakcji. |
HELP | Prosi serwer o wyświetlenie listy obsługiwanych poleceń. |
QUIT | Grzecznie kończy sesję. Serwer odpowiada 221 i zamyka połączenie. |
Pierwsza cyfra informuje o kategorii, dzięki czemu możesz odczytać każdą odpowiedź, nawet jeśli nie znasz dokładnego kodu:
354 po DATA).| Kod | Znaczenie |
|---|---|
220 | Usługa gotowa (baner powitalny). |
221 | Zamykanie połączenia (odpowiedź na QUIT). |
250 | OK — polecenie zaakceptowane (odpowiedź, na którą czekasz po RCPT TO). |
251 / 252 | Użytkownik nie jest lokalny, ale wiadomość zostanie przekazana / nie można zweryfikować, ale serwer spróbuje dostarczyć. |
354 | Rozpocznij wysyłanie treści wiadomości (po DATA). |
421 | Usługa niedostępna, zamykanie — często ograniczanie przepustowości (rate-limiting). |
450 / 451 / 452 | Problem tymczasowy (skrzynka zajęta, błąd lokalny, mało miejsca). Często pojawia się tu greylisting. |
502 | Polecenie nieobsługiwane (typowa odpowiedź na VRFY / EXPN). |
550 | Skrzynka niedostępna / brak takiego użytkownika — adres nie istnieje. |
551 / 552 / 553 / 554 | Użytkownik nie jest lokalny / przekroczony limit / nieprawidłowa nazwa skrzynki / transakcja nieudana. |
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
4xx, prosząc o powrót później. 4xx nie oznacza, że adres jest nieprawidłowy.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.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.