Modul 1 · 1.2
Slovenčina
SMTP: rozhovor medzi mailovými servermi
Modul 1: Ako funguje e-mail · Čas čítania: 10 minút
Cieľ lekcie: Po tejto lekcii dokážete prečítať SMTP rozhovor, vysvetliť, čo robia EHLO, MAIL FROM, RCPT TO a DATA, a podľa kódu odpovede rozpoznať, či je chyba dočasná alebo trvalá.
Kľúčové pojmy: SMTP (RFC 5321), relácia, EHLO/HELO, MAIL FROM, RCPT TO, DATA, QUIT, kód odpovede (2xx, 3xx, 4xx, 5xx), rozšírený stavový kód, rozšírenia (STARTTLS, AUTH, SIZE), null MX
Rozhovor v obyčajnom texte
SMTP je veľmi starý protokol (prvá verzia je z roku 1982), a preto je veľmi čitateľný. Dva servery si navzájom posielajú riadky textu. Odosielateľ (klient) posiela príkaz, príjemca (server) odpovedá trojciferným číslom a krátkym vysvetlením. Takýto rozhovor si môžete doslovne prečítať v chybovom hlásení alebo v logu, a práve preto sa oplatí mu rozumieť.
Nižšie je uvedený úplný rozhovor. S: je prijímajúci server, C: odosielajúci server. Pošta ide z anna@example.com na jan@example.net.
S: 220 mx1.mailprovider.example ESMTP ready
C: EHLO out.hosting.example
S: 250-mx1.mailprovider.example Hello out.hosting.example [192.0.2.25]
S: 250-SIZE 52428800
S: 250-8BITMIME
S: 250-STARTTLS
S: 250 SMTPUTF8
C: STARTTLS
S: 220 2.0.0 Ready to start TLS
(od tohto momentu je spojenie šifrované; klient znova posiela EHLO)
C: EHLO out.hosting.example
S: 250 ...
C: MAIL FROM:<anna@example.com> SIZE=24310
S: 250 2.1.0 Ok
C: RCPT TO:<jan@example.net>
S: 250 2.1.5 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: Anna <anna@example.com>
C: To: Jan <jan@example.net>
C: Subject: Offerte
C: Date: Sun, 8 Nov 2026 10:15:00 +0100
C: Message-ID: <a1b2c3@example.com>
C:
C: Hoi Jan, hierbij de offerte.
C: .
S: 250 2.0.0 Ok: queued as 4F2A1B
C: QUIT
S: 221 2.0.0 ByePríkazy jeden po druhom
| Príkaz | Význam | Pozor na |
|---|---|---|
| (pripojenie) | Server pozdraví kódom 220 a svojím názvom. | Toto sa nazýva banner. Ak server hneď povie 554, nechce vôbec komunikovať s vašou IP adresou (často kvôli blokovaciemu zoznamu). |
EHLO názov | „Ahoj, som out.hosting.example." Server odpovie rozšíreniami, ktoré pozná. | Názov by mal byť skutočný názov odosielajúceho servera, najlepšie zhodný s jeho PTR záznamom (lekcia 5.1). HELO je stará varianta bez rozšírení. |
STARTTLS | „Od teraz šifrujme." | Len ak to server ponúka. Medzi servermi je to zvyčajne dobrovoľné (lekcia 5.4). |
MAIL FROM:<adresa> | Odosielateľ obálky (envelope): sem smerujú chybové hlásenia. | Neskôr sa stáva hlavičkou Return-Path. SPF kontroluje práve túto adresu. Prázdneho odosielateľa <> používajú servery pre vlastné chybové hlásenia, aby bounce nikdy nevyvolal ďalší bounce. |
RCPT TO:<adresa> | Príjemca. Môže sa opakovať, jeden na každého príjemcu. | Práve tu by mal server už povedať, či adresa existuje. 550 5.1.1 v tomto momente je korektná, okamžite rozpoznateľná chyba. |
DATA | „Teraz príde samotná pošta." Server odpovie 354. | Potom nasledujú hlavičky, prázdny riadok a text. Riadok s jedinou bodkou rozhovor ukončí. |
QUIT | Koniec rozhovoru. |
Najdôležitejšie poznanie: všetko pred DATA je obálka (envelope), všetko po DATA je obsah. To, čo je v MAIL FROM, a to, čo je v hlavičke From:, sa dodávajú oddelene a nemusia byť rovnaké. Server doručuje podľa RCPT TO; riadok To: v obsahu pri doručovaní nehrá žiadnu úlohu.
Kódy odpovedí
Prvá číslica kódu je najdôležitejšia:
| Začína sa | Význam | Čo robí odosielateľ? |
|---|---|---|
| 2 | Úspech. | Pokračuje sa ďalším krokom. 250 po DATA znamená: server poštu prevzal a je za ňu teraz zodpovedný. |
| 3 | Pokračujte, čakám na viac. | Len pri 354 po DATA (a pri prihlasovaní). |
| 4 | Dočasná chyba: teraz nie, skúste neskôr. | Pošta zostáva vo fronte a neskôr sa ponúkne znova. |
| 5 | Trvalá chyba: toto sa nepodarí. | Odosielateľ to vzdáva a posiela chybové hlásenie (bounce) na adresu odosielateľa z obálky. |
Za trojciferným kódom uvádzajú moderné servery rozšírený stavový kód v tvare class.subject.detail (RFC 3463), napríklad 5.1.1. Prvá číslica je znova 2, 4 alebo 5. Druhá číslica hovorí, o čo ide: 1 = adresa, 2 = schránka, 3 = mailový systém, 4 = sieť a smerovanie, 5 = protokol, 6 = obsah, 7 = bezpečnosť a politika. Niekoľko príkladov, ktoré uvidíte často:
550 5.1.1 The email account that you tried to reach does not exist
452 4.2.2 Mailbox full (dočasné)
552 5.3.4 Message size exceeds fixed limit
451 4.7.1 Greylisted, please try again later
550 5.7.1 Message rejected (politika: spam, blokovací zoznam, DMARC)V module 6 sa naučíte prečítať celý bounce a nájdete tam tabuľku s najčastejšími kódmi.
Prečo je dočasnosť a trvalosť taká dôležitá
Server, ktorý má pochybnosti, často odpovie kódom 4xx. Známym príkladom je greylisting: server, ktorý odosielateľa ešte nepozná, povie pri prvom pokuse „skúste to neskôr". Skutočný mailový server sa po pár minútach vráti, mnohé spamové programy nie. Aj veľkí príjemcovia používajú 4xx na spomalenie tempa, keď IP adrese ešte nedôverujú. Pre vás ako odosielateľa to znamená: oneskorenie, ale nie stratu. Systém si to zväčša vyrieši sám.
5xx je iné. Vtedy sa odosielateľ už nebude znova pokúšať. Ak dostanete 5xx, musí niekto niečo zmeniť: adresu, obsah alebo nastavenia odosielajúcej domény.
Jedna nástraha: niektoré servery vracajú 5xx, hoci je problém dočasný (napríklad pri plnej schránke 552 5.2.2), a iné vracajú 4xx pre niečo, čo sa nikdy nepodarí. Preto si vždy prečítajte text za kódom, nielen číslo.
Kto je zodpovedný?
Po 250 na konci DATA leží zodpovednosť na prijímajúcom serveri. Ak sa mu potom nepodarí umiestniť poštu do schránky, musí sám poslať chybové hlásenie späť. To je zdroj nepríjemného javu: backscatter. Server, ktorý najprv všetko prevezme a až neskôr zistí, že adresa neexistuje, posiela bounce na adresu odosielateľa z obálky. Ak bola táto adresa sfalšovaná spamerom, bounce dostane nevinná tretia strana. Preto by servery mali odmietnuť to, čo sa nedá doručiť, už pri RCPT TO (pozri aj catch-all v lekcii 3.3).
V praxi: SMTP vo vašom vlastnom prostredí
Bežný používateľ zriedka vidí celý SMTP rozhovor, ale vidí jeho časti:
- v bounci je posledný riadok rozhovoru, napríklad
Remote-MTA: mx1.mailprovider.exampleaDiagnostic-Code: smtp; 550 5.1.1 ...; - v hlavičkách prijatej pošty je pre každý server riadok
Received:s názvom z EHLO a IP adresou (lekcia 1.5); - v paneli s mailovým logom, ako je E-mailové sledovanie v DirectAdmin u WebOké, vidíte pri každej správe odpoveď prijímajúceho servera. U iných poskytovateľov sa to môže volať napríklad sledovanie správ alebo mail log, a obsah je podobný.
Na to, aby ste si toto mohli prečítať, sa teda sami nemusíte pripájať k mailovému serveru. Kto to chce aj tak vyskúšať: pomocou openssl s_client -starttls smtp -connect server:25 môžete rozhovor viesť ručne, ale mnohí domáci poskytovatelia blokujú odchádzajúcu komunikáciu na porte 25 (lekcia 1.4).
Zhrnutie
- SMTP je čitateľný rozhovor: EHLO, (STARTTLS), MAIL FROM, RCPT TO, DATA, QUIT.
- Všetko pred DATA je obálka (doručovanie a chybové hlásenia), všetko po DATA je obsah s hlavičkami, ktoré vidíte.
- 2xx = úspech, 4xx = dočasné (neskôr znova), 5xx = trvalé (bounce).
- Rozšírený kód
X.Y.Zhovorí, o čo ide; X.1 adresa, X.2 schránka, X.7 politika a bezpečnosť. - Vždy si prečítajte text za kódom; servery nie sú vždy dôsledné.
Kvíz
Úloha
Úloha Z1.2: Doména, ktorá nedostáva poštu. Vyhľadajte MX záznamy domény example.com. Zapíšte, čo ste našli, a vyberte, čo urobí odosielajúci server s poštou pre info@example.com: (a) doručí ju na server s prioritou 0, (b) skúsi A-záznam, (c) hneď to vzdá, alebo (d) skúsi to neskôr znova. Program MX záznam vyhľadá naživo a výsledok skontroluje.
Ďalšie čítanie
Kroky v týchto článkoch platia pre panely WebOké; u iných poskytovateľov to funguje podobne.
- Vysvetlenie procesu odosielania e-mailov / SMTP
- Mail delivery failed: ako si prečítať chybové hlásenie a čo jednotlivé kódy znamenajú
- Návod na DirectAdmin 9.3: E-mailové sledovanie: kam zmizla moja pošta?
- RFC 5321 (SMTP), časť 3 a 4.2 (kódy odpovedí); RFC 3463 (rozšírené stavové kódy); RFC 7505 (null MX)
