Ενότητα 1 · 1.2
SMTP: η συνομιλία μεταξύ mail servers
Ενότητα 1: Πώς λειτουργεί το email · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα θα μπορείτε να διαβάζετε μια συνομιλία SMTP, να εξηγείτε τι κάνουν οι εντολές EHLO, MAIL FROM, RCPT TO και DATA, και να αναγνωρίζετε από έναν κωδικό απάντησης αν ένα σφάλμα είναι προσωρινό ή οριστικό.
Βασικές έννοιες: SMTP (RFC 5321), session, EHLO/HELO, MAIL FROM, RCPT TO, DATA, QUIT, κωδικός απάντησης (2xx, 3xx, 4xx, 5xx), εκτεταμένος κωδικός κατάστασης, επεκτάσεις (STARTTLS, AUTH, SIZE), null MX
Μια συνομιλία σε απλό κείμενο
Το SMTP είναι ένα πολύ παλιό πρωτόκολλο (η πρώτη έκδοση είναι από το 1982) και γι' αυτό είναι πολύ ευανάγνωστο. Δύο servers στέλνουν ο ένας στον άλλο γραμμές κειμένου. Ο αποστολέας (ο client) στέλνει μια εντολή, ο παραλήπτης (ο server) απαντά με έναν αριθμό τριών ψηφίων και μια σύντομη εξήγηση. Μπορείτε να διαβάσετε μια τέτοια συνομιλία κυριολεκτικά μέσα σε ένα μήνυμα σφάλματος ή σε ένα αρχείο καταγραφής, και γι' αυτό ακριβώς αξίζει να την κατανοήσετε.
Παρακάτω βλέπετε μια πλήρη συνομιλία. Το S: είναι ο server που λαμβάνει, το C: ο server που στέλνει. Το mail πηγαίνει από το anna@example.com στο 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
(από εδώ και πέρα η σύνδεση είναι κρυπτογραφημένη· ο client στέλνει ξανά 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 ByeΟι εντολές μία προς μία
| Εντολή | Σημασία | Προσέξτε |
|---|---|---|
| (σύνδεση) | Ο server χαιρετά με 220 και το όνομά του. | Αυτό λέγεται banner. Αν ο server πει αμέσως 554, τότε δεν θέλει καθόλου να επικοινωνήσει με τη δική σας IP (συχνά λόγω blocklist). |
EHLO όνομα | «Γεια, είμαι ο out.hosting.example.» Ο server απαντά με τις επεκτάσεις που γνωρίζει. | Το όνομα θα πρέπει να είναι το πραγματικό όνομα του server αποστολής, κατά προτίμηση ίδιο με την PTR-εγγραφή του (μάθημα 5.1). Το HELO είναι η παλιά παραλλαγή χωρίς επεκτάσεις. |
STARTTLS | «Ας κρυπτογραφήσουμε από εδώ και πέρα.» | Μόνο αν ο server το προσφέρει. Μεταξύ servers αυτό είναι συνήθως προαιρετικό (μάθημα 5.4). |
MAIL FROM:<διεύθυνση> | Ο αποστολέας του envelope: εδώ πηγαίνουν τα μηνύματα σφάλματος. | Γίνεται αργότερα η κεφαλίδα Return-Path. Το SPF ελέγχει αυτή τη διεύθυνση. Έναν κενό αποστολέα <> τον χρησιμοποιούν οι servers για τα δικά τους μηνύματα σφάλματος, ώστε ένα bounce να μην προκαλεί ποτέ άλλο bounce. |
RCPT TO:<διεύθυνση> | Ο παραλήπτης. Μπορεί να εμφανίζεται πολλές φορές, μία ανά παραλήπτη. | Εδώ θα έπρεπε ο server να πει ήδη αν η διεύθυνση υπάρχει. Ένα 550 5.1.1 σε αυτό το σημείο είναι ένα σωστό, αμέσως αναγνωρίσιμο σφάλμα. |
DATA | «Τώρα έρχεται το ίδιο το mail.» Ο server απαντά 354. | Στη συνέχεια ακολουθούν οι κεφαλίδες, μια κενή γραμμή και το κείμενο. Μια γραμμή που περιέχει μόνο μια τελεία κλείνει το μήνυμα. |
QUIT | Τέλος της συνομιλίας. |
Το σημαντικότερο σημείο: ό,τι προηγείται του DATA είναι το envelope, ό,τι ακολουθεί το DATA είναι το περιεχόμενο. Αυτό που βρίσκεται στο MAIL FROM και αυτό που βρίσκεται στην κεφαλίδα From: παρέχονται ξεχωριστά και δεν χρειάζεται να είναι ίδια. Ο server παραδίδει βάσει του RCPT TO· η γραμμή To: στο περιεχόμενο δεν παίζει κανέναν ρόλο στην παράδοση.
Οι κωδικοί απάντησης
Το πρώτο ψηφίο του κωδικού είναι το σημαντικότερο:
| Ξεκινά με | Σημασία | Τι κάνει ο αποστολέας; |
|---|---|---|
| 2 | Επιτυχία. | Προχωράμε στο επόμενο βήμα. Το 250 μετά το DATA σημαίνει: ο server παρέλαβε το mail και είναι πλέον υπεύθυνος γι' αυτό. |
| 3 | Συνεχίστε, περιμένω περισσότερα. | Μόνο στο 354 μετά το DATA (και κατά τη σύνδεση). |
| 4 | Προσωρινό σφάλμα: όχι τώρα, δοκιμάστε αργότερα. | Το mail παραμένει στην ουρά και προσφέρεται ξανά αργότερα. |
| 5 | Οριστικό σφάλμα: αυτό δεν πρόκειται να πετύχει. | Ο αποστολέας εγκαταλείπει και στέλνει ένα μήνυμα σφάλματος (bounce) στον αποστολέα του envelope. |
Μετά τα τρία ψηφία, στους σύγχρονους servers εμφανίζεται ένας εκτεταμένος κωδικός κατάστασης στη μορφή class.subject.detail (RFC 3463), για παράδειγμα 5.1.1. Το πρώτο ψηφίο είναι και πάλι 2, 4 ή 5. Το δεύτερο ψηφίο δείχνει το θέμα: 1 = διεύθυνση, 2 = mailbox, 3 = σύστημα mail, 4 = δίκτυο και δρομολόγηση, 5 = πρωτόκολλο, 6 = περιεχόμενο, 7 = ασφάλεια και πολιτική. Μερικά που συναντάτε συχνά:
550 5.1.1 The email account that you tried to reach does not exist
452 4.2.2 Mailbox full (προσωρινό)
552 5.3.4 Message size exceeds fixed limit
451 4.7.1 Greylisted, please try again later
550 5.7.1 Message rejected (πολιτική: spam, blocklist, DMARC)Στην ενότητα 6 θα μάθετε να διαβάζετε ένα πλήρες bounce και θα βρείτε έναν πίνακα με τους πιο συχνούς κωδικούς.
Γιατί η διάκριση προσωρινό/οριστικό είναι τόσο σημαντική
Ένας server που διστάζει, απαντά συχνά με έναν κωδικό 4xx. Ένα γνωστό παράδειγμα είναι το greylisting: ένας server που δεν γνωρίζει ακόμη τον αποστολέα, λέει την πρώτη φορά «δοκιμάστε αργότερα». Ένας πραγματικός mail server επανέρχεται μετά από μερικά λεπτά, πολλά προγράμματα spam όχι. Επίσης οι μεγάλοι πάροχοι χρησιμοποιούν το 4xx για να επιβραδύνουν τον ρυθμό όταν δεν εμπιστεύονται ακόμη μια διεύθυνση IP. Για εσάς ως αποστολέα αυτό σημαίνει: καθυστέρηση, αλλά όχι απώλεια. Το σύστημα το λύνει συνήθως μόνο του.
Ένα 5xx είναι διαφορετικό. Εκεί ο αποστολέας δεν θα ξαναπροσπαθήσει. Αν λάβετε ένα 5xx, κάποιος πρέπει να αλλάξει κάτι: τη διεύθυνση, το περιεχόμενο ή τις ρυθμίσεις του domain αποστολής.
Μια παγίδα: ορισμένοι servers δίνουν ένα 5xx ενώ το πρόβλημα είναι προσωρινό (για παράδειγμα σε περίπτωση γεμάτου mailbox 552 5.2.2), και άλλοι δίνουν ένα 4xx για κάτι που δεν πρόκειται ποτέ να πετύχει. Διαβάζετε λοιπόν πάντα το κείμενο μετά τον κωδικό, όχι μόνο τον αριθμό.
Ποιος είναι υπεύθυνος;
Μετά το 250 στην τελεία του DATA, η ευθύνη περνά στον server παραλήπτη. Αν στη συνέχεια δεν καταφέρει να τοποθετήσει το mail στο mailbox, θα πρέπει ο ίδιος να στείλει πίσω ένα μήνυμα σφάλματος. Αυτή είναι η πηγή ενός δύσκολου φαινομένου: το backscatter. Ένας server που πρώτα δέχεται τα πάντα και μετά σκέφτεται ότι η διεύθυνση δεν υπάρχει, στέλνει ένα bounce στον αποστολέα του envelope. Αν αυτός είχε πλαστογραφηθεί από έναν spammer, τότε ένας αθώος τρίτος λαμβάνει το bounce. Γι' αυτό οι servers θα πρέπει να απορρίπτουν ήδη στο RCPT TO ό,τι δεν μπορεί να γίνει (δείτε επίσης catch-all στο μάθημα 3.3).
Στην πράξη: βλέποντας το SMTP στο δικό σας περιβάλλον
Ένας απλός χρήστης σπάνια βλέπει ολόκληρη τη συνομιλία SMTP, αλλά σε κομμάτια:
- σε ένα bounce εμφανίζεται η τελευταία γραμμή της συνομιλίας, για παράδειγμα
Remote-MTA: mx1.mailprovider.exampleκαιDiagnostic-Code: smtp; 550 5.1.1 ...· - στις κεφαλίδες ενός mail που λαμβάνετε υπάρχει ανά server μια γραμμή
Received:με το όνομα EHLO και τη διεύθυνση IP (μάθημα 1.5)· - σε ένα panel με αρχείο καταγραφής mail, όπως το E-mail Tracking στο DirectAdmin στο WebOké, βλέπετε ανά μήνυμα την απάντηση του server παραλήπτη. Σε άλλους παρόχους κάτι τέτοιο ονομάζεται για παράδειγμα παρακολούθηση μηνυμάτων ή mail log, και το περιεχόμενο είναι παρόμοιο.
Δεν χρειάζεται λοιπόν να συνδεθείτε εσείς οι ίδιοι με έναν mail server για να μπορείτε να το διαβάζετε αυτό. Όποιος θέλει να το δοκιμάσει: με την εντολή openssl s_client -starttls smtp -connect server:25 μπορείτε να διεξαγάγετε τη συνομιλία με το χέρι, αλλά πολλοί πάροχοι οικιακής σύνδεσης μπλοκάρουν την εξερχόμενη κίνηση στη θύρα 25 (μάθημα 1.4).
Σύνοψη
- Το SMTP είναι μια ευανάγνωστη συνομιλία: EHLO, (STARTTLS), MAIL FROM, RCPT TO, DATA, QUIT.
- Ό,τι προηγείται του DATA είναι το envelope (παράδοση και μηνύματα σφάλματος), ό,τι ακολουθεί είναι το περιεχόμενο με τις κεφαλίδες που βλέπετε.
- 2xx = επιτυχία, 4xx = προσωρινό (δοκιμή ξανά αργότερα), 5xx = οριστικό (bounce).
- Ο εκτεταμένος κωδικός
X.Y.Zδείχνει το θέμα· X.1 διεύθυνση, X.2 mailbox, X.7 πολιτική και ασφάλεια. - Διαβάζετε πάντα το κείμενο μετά τον κωδικό· οι servers δεν είναι πάντα συνεπείς.
Κουίζ
Άσκηση
Άσκηση Z1.2: Ένα domain που δεν λαμβάνει mail. Αναζητήστε τις MX-εγγραφές του example.com. Συμπληρώστε τι βρίσκετε και επιλέξτε τι κάνει ένας server αποστολής με mail για το info@example.com: (a) παράδοση στον server με προτεραιότητα 0, (b) δοκιμή της A-εγγραφής, (c) άμεση εγκατάλειψη, ή (d) νέα προσπάθεια αργότερα. Το πρόγραμμα αναζητά την MX-εγγραφή ζωντανά και ελέγχει.
Περαιτέρω ανάγνωση
Τα βήματα σε αυτά τα άρθρα ισχύουν για τα panel του WebOké· σε άλλους παρόχους η διαδικασία είναι παρόμοια.
- Πώς λειτουργεί η αποστολή email (SMTP)
- Mail delivery failed: πώς να διαβάσετε το μήνυμα σφάλματος και τι σημαίνουν οι κωδικοί
- Εγχειρίδιο DirectAdmin 9.3: E-mail Tracking: πού πήγε το μήνυμά μου;
- RFC 5321 (SMTP), παράγραφος 3 και 4.2 (κωδικοί απάντησης)· RFC 3463 (εκτεταμένοι κωδικοί κατάστασης)· RFC 7505 (null MX)
