Poczta elektroniczna istnieje w takiej czy innej formie już od lat 60. Użytkownicy pozostawiali sobie nawzajem wiadomości, korzystając z wielu różnych metod na komputerach mainframe, ale dopiero w sierpniu 1982 roku, kiedy to Instytut Nauk Informacyjnych opublikował protokół SMTP (Simple Mail Transfer Protocol; RFC 821), zaproponowano znormalizowaną metodę wysyłania i odbierania wiadomości e-mail.
Protokół SMTP szybko zyskał popularność w sieci ARPANET, zastępując starsze, bardziej skomplikowane metody przesyłania poczty między komputerami mainframe, a po raz pierwszy został obsłużony pod koniec 1982 roku przez jeden z pierwszych programów do przesyłania poczty – Sendmail – w systemie BSD 4.1c.
Od tamtego czasu protokół był dość regularnie aktualizowany i rozbudowywany, jednak podstawowa metoda wysyłania wiadomości e-mail pozostała w dużej mierze niezmieniona.
Protokół ten jest protokołem tekstowym, który pierwotnie nie obsługiwał przesyłania danych binarnych. Jednak właśnie dzięki temu, że jest oparty na tekście, protokół ten był łatwy do wdrożenia i utrzymania. MIME (Multipurpose Internet Mail Extensions) stał się popularny pod koniec lat 80. do kodowania i wysyłania danych binarnych przez SMTP. Obecnie SMTP jest dominującym protokołem do wysyłania i odbierania poczty elektronicznej w Internecie, a znajomość tego protokołu jest niezbędna dla każdego administratora sieci.
Ponieważ protokół SMTP opiera się na tekście, opanowanie go jest znacznie łatwiejsze niż w przypadku wielu innych protokołów, a do bezpośredniej komunikacji z serwerem SMTP wystarczy program umożliwiający wysyłanie danych ASCII przez port TCP/IP nr 25, taki jak Telnet.
Wiadomości są wysyłane za pośrednictwem protokołu SMTP w ramach transakcji, co oznacza, że jeśli wysłanie wiadomości nie zakończy się pomyślnie i bez wystąpienia błędu, wiadomość zostaje odrzucona. RFC 821 opisuje transakcję jako składającą się z trzech etapów: określenia nadawcy, podania jednego lub więcej odbiorców, a następnie wysłania samej wiadomości. Łatwiej jednak wyobrazić sobie transakcję SMTP jako składającą się z 5 etapów:
- Uścisk dłoni
- Adres zwrotny
- Wyślij do odbiorców
- Wyślij dane wiadomości
- Zakończ transakcję
Uścisk dłoni
Po nawiązaniu połączenia z serwerem SMTP na porcie 25 nadawca wiadomości musi poczekać, aż odbiorca zaakceptuje połączenie i zidentyfikuje się w następującym formacie:
220 [domena] [Informacje o usłudze]
Przykład: 220 example.com Usługa gotowa
Nadawca musi następnie przedstawić się odbiorcy za pomocą polecenia HELO.
HELO [domena]
Przykład: HELO example.com
Serwery pocztowe będą oczekiwać, że każdy z nich zidentyfikuje się za pomocą nazwy domeny, która może posłużyć do weryfikacji tożsamości serwera poprzez sprawdzenie rekordu MX; jednak serwer odbierający nie może na tym etapie odrzucić połączenia, nawet jeśli nie da się zweryfikować tożsamości nadawcy, i dlatego musi odpowiedzieć:
250 [Wiadomość]
Przykład: 250 example.com Cześć, Bob z example.com
Kod odpowiedzi 250 to ogólna odpowiedź ‘OK’ wysyłana przez serwer SMTP, informująca o pomyślnym zakończeniu ostatniej operacji.
Adres zwrotny:
Po nawiązaniu połączenia między dwoma serwerami rozpoczyna się transakcja SMTP i można zacząć wysyłać polecenia do serwera. Jeśli chcesz sprawdzić, jakie polecenia obsługuje serwer, wyślij polecenie HELP, a serwer SMTP powinien odpowiedzieć komunikatem zawierającym listę obsługiwanych poleceń.
Aby wysłać wiadomość do użytkownika na tym serwerze, musimy najpierw ustawić adres zwrotny. Adres zwrotny należy podać jako pierwszy, aby w razie wystąpienia błędów podczas transakcji SMTP mogły one zostać zgłoszone właśnie na ten adres. W tym celu używamy polecenia ‘MAIL FROM’:
WIADOMOŚĆ OD:
Przykład: NADSYŁA:
Zwróć uwagę na znaki „mniejsze niż” i „większe niż”. Zgodnie z normą RFC 821 muszą one otaczać sam adres e-mail. Jeśli adres zostanie zaakceptowany, protokół SMTP zwróci odpowiedź 250 OK.
Wyślij do odbiorców
Po ustawieniu adresu zwrotnego protokół SMTP umożliwi nam określenie odbiorców wiadomości. W tym celu używamy polecenia ‘RCPT TO:’:
RCPT DO:
Przykład: RCPT DO:
Aby ustawić wielu odbiorców, wystarczy powtórzyć to polecenie dla każdego z nich. Jeśli serwer pocztowy obsługujący tego użytkownika może w danej chwili przyjąć wiadomość, powinien wysłać odpowiedź 250 OK. Jeśli jednak wiadomość dla tego użytkownika nie zostanie przyjęta, zostanie wysłana odpowiedź 550 failure lub odpowiedni kod błędu. Jeśli otrzymamy odpowiedź 250 OK, możemy kontynuować wysyłanie danych wiadomości.
Wyślij dane wiadomości
Wysyłanie danych za pośrednictwem protokołu SMTP jest dość proste, jednak formaty wiadomości mogą być dość skomplikowane, zwłaszcza w przypadku wysyłania załączników binarnych. Aby rozpocząć wysyłanie danych, należy wysłać polecenie ‘DATA’, na które serwer powinien odpowiedzieć komunikatem 354 Intermediate reply. Na przykład:
354 Wpisz wiadomość, kończąc ją znakiem “.” w osobnym wierszu
Najprostszą wiadomością, jaką możemy wysłać, jest wiadomość tekstowa, która nie wymaga stosowania wieloczęściowego formatu MIME. Wszystkie wiadomości, zarówno tekstowe, jak i inne, kończy się wysłaniem wiersza zawierającego wyłącznie znak kropki. Ponadto przed wysłaniem wiadomości można dołączyć informacje nagłówkowe, takie jak data, temat, adresat, kopia i nadawca.
Przykład:
DANE
354 Wpisz wiadomość, kończąc ją znakiem “.” w osobnym wierszu
Temat: To jest temat wiadomości tekstowej z planem
A to jest treść wiadomości tekstowej.
W przypadku akceptacji serwer SMTP zwróci odpowiedź 250 OK lub kod błędu, jeśli transakcja zakończyła się niepowodzeniem lub była niekompletna. Należy zwrócić uwagę na znak kropki na końcu wiersza treści wiadomości – serwer przestaje nasłuchiwać danych tylko wtedy, gdy w wierszu znajduje się pojedynczy znak kropki. Jeśli serwer nadawcy wysyła wiadomość, która spowodowałaby przedwczesne zamknięcie sesji danych, ponieważ wiadomość zawiera pojedynczy znak kropki w wierszu, powinien dodać do tego wiersza dodatkowy znak kropki.
Zakończenie transakcji
Do tego momentu wszystkie dane przesłane do serwera SMTP odbiorczego są traktowane jako tymczasowe. Jeśli polecenie ‘QUIT’ nie zostanie wysłane przed zamknięciem połączenia, serwer docelowy po prostu usunie wszelkie dane wiadomości, które zostały zapisane. Pierwotnie używane jako elegancki sposób na zamknięcie połączenia, obecnie jest powszechnie stosowane do oznaczenia zakończonej transakcji, przy czym wiele serwerów pocztowych czeka na polecenie QUIT przed umieszczeniem wiadomości w kolejce do przekierowania przez agenta transferu wiadomości. Po wysłaniu polecenia QUIT serwer docelowy powinien wysłać odpowiedź 221, aby potwierdzić zakończenie transakcji i zamknięcie połączenia.
Jeśli zapoznasz się z protokołem SMTP, zalecamy przeczytanie dokumentów RFC 821, 2476 i 2554. Należy pamiętać, zwłaszcza podczas lektury RFC 821, że od 1982 roku serwery pocztowe uległy znacznym zmianom, częściowo w odpowiedzi na nadużycia ze strony spamerów.
