Kod

Protokół SMTP: Jak działa wysyłanie wiadomości e-mail?

Protokół SMTP: Jak działa wysyłanie wiadomości e-mail?

Kurs praktyczny: „Specjalizacja inżyniera DevOps”

Dowiedz się więcej

Pomimo powszechnego używania komunikatorów internetowych, miliardy użytkowników na całym świecie codziennie wysyłają e-maile. Za każdym e-mailem stoi protokół SMTP (Simple Mail Transfer Protocol), który zapewnia przesyłanie wiadomości między serwerami pocztowymi. W tym artykule szczegółowo omówimy strukturę tego protokołu i zaoferujemy możliwość pracy z nim. Materiał ten będzie przydatny dla osób, które dopiero zaczynają interesować się administracją systemów i chcą pogłębić wiedzę na temat funkcjonowania poczty elektronicznej i sieci.

Spis treści

  • Simple Mail Transfer Protocol (SMTP) to standardowa metoda przesyłania wiadomości e-mail w sieci. Służy do wysyłania wiadomości z jednego serwera pocztowego na drugi, zapewniając ich dostarczenie do odbiorcy. SMTP pełni funkcję głównego mechanizmu zarządzającego procesem wysyłania i routingu wiadomości e-mail, a także współpracuje z innymi protokołami, takimi jak POP3 lub IMAP, które obsługują odbieranie i przechowywanie wiadomości e-mail. Ważną cechą protokołu SMTP jest jego prostota i wydajność, co sprawia, że ​​jest on szeroko stosowany w różnych systemach i aplikacjach pocztowych.
  • Jak bezpieczny jest ten protokół?
  • Protokół SMTP, czyli Simple Mail Transfer Protocol, to standardowy mechanizm używany do wysyłania wiadomości e-mail przez Internet. Jego główną funkcją jest przesyłanie wiadomości od klienta do serwera i między serwerami.

    Gdy użytkownik wysyła wiadomość e-mail, klient poczty inicjuje komunikację z serwerem SMTP. Proces ten rozpoczyna się od nawiązania połączenia TCP, zazwyczaj na porcie 25, 587 lub 465. Po pomyślnym nawiązaniu połączenia klient wysyła polecenia SMTP, które zawierają informacje o odbiorcy, nadawcy i treści samej wiadomości.

    Serwer przetwarza te polecenia i, jeśli wszystkie dane są poprawne, przesyła wiadomość e-mail do docelowego serwera SMTP odbiorcy. Jeśli serwer ten jest aktualnie niedostępny, wiadomość może zostać tymczasowo umieszczona w kolejce w celu późniejszej próby doręczenia.

    Gdy wiadomość e-mail dotrze do serwera docelowego, jest przechowywana do momentu sprawdzenia poczty przez odbiorcę. W tym celu wykorzystywane są inne protokoły, takie jak POP3 lub IMAP, które odpowiadają za pobieranie wiadomości ze skrzynki pocztowej.

    Cały proces przesyłania wiadomości e-mail za pomocą protokołu SMTP jest zautomatyzowany i wymaga minimalnej ingerencji użytkownika, zapewniając jednocześnie wysoki poziom niezawodności i wydajności.

  • Protokół SMTP (Simple Mail Transfer Protocol) wykorzystuje różne kody i porty do przesyłania wiadomości e-mail i obsługi błędów. Najpopularniejszym portem dla połączeń SMTP jest 25, choć powszechnie używane są również porty 587 i 465.

    Kody statusu zwracane przez serwer informują klientów o statusie ich żądań. Na przykład kod 250 oznacza pomyślną transmisję wiadomości, a kod 550 sygnalizuje, że żądany adres jest niedostępny lub nie istnieje.

    Błędy mogą wystąpić z różnych powodów, takich jak nieprawidłowe adresy odbiorców, problemy z siecią lub ustawienia serwera. Zrozumienie tych kodów i portów pomoże użytkownikom i administratorom skuteczniej rozwiązywać problemy z pocztą e-mail.

  • Poradnik: Wysyłanie wiadomości e-mail za pomocą SMTP, Mailtrapa i Pythona

Definicja i cel SMTP

Zacznijmy od oficjalnej definicji: SMTP to standardowy protokół sieciowy używany do przesyłania i kierowania wiadomości e-mail między serwerami pocztowymi a klientami. Protokół ten opisuje cały proces przesyłania wiadomości od nadawcy do odbiorcy — od momentu kliknięcia przez użytkownika przycisku „Wyślij” w aplikacji pocztowej, aż do momentu dotarcia wiadomości na serwer odbiorcy.

Protokół SMTP, czyli Simple Mail Transfer Protocol, został zaprojektowany wyłącznie do wysyłania wiadomości e-mail, a nie do ich odbierania. Można to zilustrować analogią do tradycyjnej poczty: listonosz dostarcza list do skrzynki pocztowej, ale to odbiorca pozostaje odpowiedzialny za jego pobranie i przeczytanie.

Protokoły IMAP i POP służą do pobierania wiadomości e-mail. Gdy logujesz się do Gmaila lub Yandex Mail, Twój klient poczty używa jednego z tych protokołów do dostępu do wiadomości na serwerze. IMAP, czyli Internet Message Access Protocol, umożliwia pracę z wiadomościami e-mail bezpośrednio na serwerze i synchronizację ich między różnymi urządzeniami. Z kolei POP, czyli Post Office Protocol, umożliwia pobieranie wiadomości e-mail ze skrzynki pocztowej na urządzenie. W przyszłości opowiemy Ci więcej o tym, jak działają te dwa protokoły.

Infografiki: pixelbazaar / SVG Repo / Skillbox Media

Poziom bezpieczeństwa

Protokół SMTP został opracowany na początku Lata 80. XX wieku. Początkowo był to dość prosty protokół tekstowy, w którym wszystkie informacje były przesyłane bez zabezpieczeń i szyfrowania. W związku z tym, jeśli użytkownik podał swoje dane uwierzytelniające, atakujący mogli je łatwo przechwycić za pomocą narzędzi do analizy ruchu sieciowego.

Wraz ze wzrostem liczby użytkowników poczty elektronicznej protokół SMTP ulegał licznym udoskonaleniom. Obecnie kluczowe cechy tego protokołu opisano w dwóch głównych dokumentach: RFC 5321 i RFC 5322. RFC 5321 omawia szczegóły techniczne działania SMTP, w tym proces połączenia, listę poleceń oraz wymianę wiadomości między serwerami. Z kolei RFC 5322 ustanawia standardy dotyczące formatu samej wiadomości, definiując strukturę nagłówków, organizację treści i inne elementy wiadomości.

W 1995 roku protokół został uzupełniony o nową wersję – ESMTP (Extended Simple Mail Transfer Protocol). Aktualizacja ta zachowała zgodność z oryginalnym SMTP i wprowadziła nowe polecenia usprawniające interakcję między klientami a serwerami. ESMTP umożliwił również przesyłanie wiadomości multimedialnych, w tym wideo, obrazów i załączników. Ponadto nowa architektura protokołu umożliwiła programistom implementację dodatkowych mechanizmów bezpieczeństwa.

Współczesny SMTP, w przeciwieństwie do swoich wcześniejszych modeli, działa w połączeniu z wieloma innymi technologiami. Szyfrowanie TLS jest stosowane w celu zapewnienia bezpieczeństwa połączenia i zapobiegania przechwytywaniu wiadomości. Ponadto wdrożono mechanizmy takie jak SMTP AUTH, SPF, DKIM i DMARC w celu weryfikacji nadawcy i ograniczenia ilości spamu.

Przeczytaj również:

Zagrożenia bezpieczeństwa informacji to potencjalne ryzyka, które mogą negatywnie wpłynąć na integralność, poufność i dostępność danych. Zagrożenia te mogą przybierać różne formy, w tym złośliwe oprogramowanie, phishing, ataki sieciowe i zagrożenia fizyczne.

Aby skutecznie zwalczać te zagrożenia, niezbędne jest kompleksowe podejście. Przede wszystkim należy wdrożyć solidne systemy bezpieczeństwa, takie jak oprogramowanie antywirusowe i zapory sieciowe. Kluczowe jest również szkolenie użytkowników: pracownicy muszą być świadomi potencjalnych zagrożeń i umieć rozpoznawać podejrzane działania.

Regularne aktualizacje oprogramowania i zabezpieczeń pomogą wyeliminować luki w zabezpieczeniach, które mogą zostać wykorzystane przez atakujących. Ponadto tworzenie kopii zapasowych danych i szyfrowanie to ważne środki, które pomogą zminimalizować konsekwencje w przypadku incydentu.

Dlatego systematyczne działania na rzecz zapewnienia bezpieczeństwa informacji, w tym środki techniczne i szkolenia personelu, są warunkiem koniecznym ochrony przed zagrożeniami w tym obszarze.

Jak działa protokół SMTP

Gdy użytkownik kliknie przycisk „Wyślij” w swoim kliencie pocztowym, nawiązywane jest połączenie z wstępnie skonfigurowanym serwerem SMTP. Od tego momentu rozpoczyna się proces wysyłania wiadomości, który obejmuje kilka kluczowych etapów: nawiązanie połączenia, przesłanie informacji, znalezienie serwera odbiorcy i zakończenie sesji. Przyjrzyjmy się każdemu z tych etapów bardziej szczegółowo.

Proces nawiązywania połączenia SMTP rozpoczyna się od utworzenia połączenia TCP między klientem pocztowym a serwerem, ponieważ SMTP używa TCP jako protokołu transportowego. Po pomyślnym nawiązaniu połączenia klient wysyła do serwera polecenie powitalne, które inicjuje wymianę danych i umożliwia określenie obsługiwanych rozszerzeń.

Przesyłanie informacji odbywa się w następujący sposób: po nawiązaniu połączenia klient rozpoczyna wysyłanie poleceń SMTP do serwera. Polecenia te obejmują adresy nadawcy i odbiorcy, a także treść samej wiadomości. Po stronie serwera proces ten realizuje MSA (mail transfer agent) – program, który odbiera przychodzącą wiadomość, sprawdza jej zgodność z ustalonymi standardami technicznymi i przygotowuje ją do dalszego routingu.

Poszukiwanie serwera, do którego wiadomość powinna zostać dostarczona, rozpoczyna się od pracy specjalnego programu – MTA (mail transfer agent). Komponent ten sprawdza, czy adresy nadawcy i odbiorcy należą do tej samej domeny, na przykład @skillbox.ru. Jeśli oba adresy należą do tej samej domeny, wiadomość jest dostarczana bezpośrednio w systemie, bez konieczności interakcji z zasobami zewnętrznymi.

Jeśli domeny są różne, serwer inicjuje żądanie do systemu DNS w celu ustalenia adresu serwera, na który wiadomość powinna zostać wysłana. Serwer SMTP nadawcy nawiązuje następnie połączenie z serwerem SMTP odbiorcy i przesyła wiadomość, korzystając z podobnego algorytmu.

Zakończenie połączenia. Po zakończeniu przesyłania danych klient wysyła polecenie do serwera SMTP, sygnalizując zakończenie sesji. Serwer potwierdza odbiór tego polecenia, po czym połączenie TCP zostaje zakończone.

Schemat procesu wysyłania listu między różnymi serwerami pocztowymi nadawcy i odbiorcy. Infografika: pixelbazaar / SVG Repo / Skillbox Media

Przeczytaj także:

Model TCP/IP: co to jest i jak działa?

Kody systemowe, błędy i porty w protokole SMTP

Aby zapewnić efektywną interakcję między serwerami pocztowymi, protokół SMTP korzysta z szeregu mechanizmów pomocniczych. Należą do nich polecenia wymiany danych, kody błędów, które pomagają identyfikować problemy, oraz konkretne porty używane do nawiązania połączenia. Przyjrzyjmy się każdemu z tych komponentów bardziej szczegółowo.

Polecenia protokołu SMTP to specyficzne instrukcje regulujące proces wysyłania wiadomości e-mail między klientem a serwerem. Można je postrzegać jako swego rodzaju wymianę uwag między klientem poczty a serwerem:

  • Wysyłanie wiadomości e-mail rozpoczyna się od polecenia HELO lub EHLO (Hello). Za pomocą tego polecenia klient poczty informuje serwer o sobie, podając nazwę domeny lub adres IP. W odpowiedzi serwer wysyła wiadomość powitalną, potwierdzającą pomyślne połączenie.
  • MAIL FROM. Po identyfikacji nadawcy, określany jest adres e-mail, z którego wiadomość zostanie wysłana. To polecenie oznacza rozpoczęcie nowej transakcji. Serwer odpowiada, potwierdzając gotowość do przyjęcia wiadomości e-mail kodem 250 OK.
  • RCPT TO (Odbiorca). Na tym etapie należy określić, do kogo adresowana jest wiadomość e-mail. Jeśli chcesz wysłać wiadomość do kilku odbiorców jednocześnie, możesz użyć wielu poleceń RCPT TO. Po każdym wysłaniu polecenia serwer odpowiada kodem OK 250.
  • Polecenie DATA inicjuje proces wysyłania zawartości wiadomości e-mail. W odpowiedzi serwer zwraca kod 354, sygnalizując gotowość do odbioru danych. Klient wysyła treść wiadomości e-mail, w tym nagłówki i załączniki, i kończy transmisję, umieszczając kropkę w oddzielnym wierszu. W odpowiedzi serwer potwierdza pomyślne odebranie, wysyłając kod OK 250.
  • Polecenie QUIT ma na celu zakończenie sesji po wysłaniu wiadomości przez klienta. W odpowiedzi na to polecenie serwer zwraca kod 221.
  • Polecenie RSET (Reset) ma na celu anulowanie aktywnej transakcji. Nie powoduje to zerwania połączenia, a jedynie resetuje bieżący stan i usuwa wszystkie informacje o liście i jego odbiorcach.

Model interakcji między klientem poczty a serwerem SMTP wygląda następująco:

Infografiki: Skillbox Media

Na powyższym obrazku ilustrujemy optymalny scenariusz przesyłania danych z gwarantowanym połączeniem. W rzeczywistości jednak wiadomości e-mail mogą być odrzucane, blokowane lub napotykać różne trudności. W rezultacie, gdy wystąpią awarie, serwer odbierający wiadomości generuje kody błędów SMTP. Kody te dzielą się na dwie kategorie: tymczasowe i trwałe.

Pierwsza kategoria błędów nazywa się trwałymi awariami przejściowymi (Persistent Transient Failure). Kody te zaczynają się od cyfry 4, po której następują dwie kolejne cyfry. Zazwyczaj wskazują one na tymczasowe awarie serwera pocztowego. W niektórych sytuacjach ponowna próba wysłania wiadomości e-mail może zakończyć się pomyślnym dostarczeniem. Jednak takie błędy są często celowo wykorzystywane przez serwery do opóźniania lub filtrowania wiadomości od podejrzanych nadawców.

Na przykład na serwerach Yandex protokół SMTP może zwrócić kod 421. Dzieje się tak, gdy serwer nie jest w stanie udzielić odpowiedzi w określonym czasie z powodu dużego obciążenia lub różnych problemów sieciowych.

Druga kategoria błędów nazywa się błędami trwałymi (Persistent Error). Kody z tej grupy zaczynają się od cyfry 5 i sygnalizują poważne błędy, takie jak utrata połączenia SMTP lub niedostarczenie wiadomości. W przeciwieństwie do błędów tymczasowych, próba ponownego wysłania wiadomości w przypadku trwałego błędu prawdopodobnie nie powiedzie się.

Rozważmy kod 550 w protokole SMTP Yandex. Ta odpowiedź serwera wskazuje, że wskazany odbiorca nie jest zarejestrowany w systemie. Może to oznaczać błąd w adresie, usunięcie skrzynki pocztowej lub to, że konto w ogóle nie istnieje.

Przeczytaj również:

Standardy HTTP: przegląd kluczowych aspektów interakcji sieciowych

Każdy serwer SMTP ma unikalny adres i port, które są używane przez klienta poczty e-mail do nawiązania z nim połączenia. Różne protokoły poczty elektronicznej wymagają użycia określonych portów. Jeśli pomyślimy o internecie jako o sieci budynków na całym świecie, adres IP będzie analogiczny do „adresu na mapie”, a port do konkretnych drzwi, przez które się wchodzi.

Protokół SMTP pierwotnie działał wyłącznie na porcie 25. Chociaż port ten jest nadal dostępny, jest często blokowany w większości sieci użytkowników. Wynika to z jego powszechnego wykorzystywania przez spamerów do masowego rozsyłania wiadomości. Dodatkowo istnieje port 465, który jest obecnie rzadko używany, ponieważ większość sieci przechodzi na nowocześniejsze metody szyfrowania.

Port 587 to obecny standard przesyłania wiadomości e-mail za pośrednictwem protokołu SMTP i jest używany przez wiele usług pocztowych. Zabezpiecza połączenia za pomocą protokołu TLS (Transport Layer Security), który szyfruje informacje przesyłane przez sieć.

Wiele usług poczty e-mail oferuje obsługę portu 2525. Chociaż port ten nie jest oficjalnie uznanym standardem dla protokołu SMTP, stanowi alternatywę w sytuacjach, gdy standardowe porty 25 lub 587 są niedostępne lub blokowane przez dostawcę usług internetowych.

Schemat połączenia z serwerami pocztowymi Yandex. Infografiki: pixelbazaar / SVG Repo / Skillbox Media

Wysyłanie wiadomości e-mail przez SMTP: użycie Mailtrapa i Pythona

Aby bezpiecznie przetestować funkcjonalność protokołu SMTP, Powinieneś zarejestrować darmowe konto Mailtrap. Ta usługa służy do testowania wysyłania wiadomości e-mail: symuluje działanie prawdziwych serwerów pocztowych, ale wszystkie wysłane wiadomości nie trafiają do skrzynki odbiorczej odbiorcy, lecz są przechowywane w „piaskownicy” dostępnej wyłącznie dla Ciebie.

Po rejestracji na koncie osobistym musisz zapisać skopiowaną nazwę użytkownika i hasło. Te dane uwierzytelniające będą potrzebne do połączenia z testowym serwerem SMTP.

Zrzut ekranu: Mailtrap / Skillbox Media

Następnym krokiem jest instalacja Pythona, po czym należy wybrać edytor do pisania kodu. W tym edytorze utwórz nowy plik i wklej do niego poniższy kod, zastępując swoje dane.

Następnie otwórz terminal w edytorze i uruchom skrypt, wpisując następujące polecenie:

Po uruchomieniu skryptu na Twoim koncie Mailtrap powinien pojawić się nowy e-mail. Możesz otworzyć go za pomocą interfejsu internetowego, wyświetlić nagłówki i zawartość oraz sprawdzić, czy transfer SMTP zakończył się pomyślnie.

Zrzut ekranu: Mailtrap / Skillbox Media

Aby dowiedzieć się więcej o kodzie, dołącz do naszego kanału na Telegramie. Z przyjemnością zobaczymy Cię wśród naszych subskrybentów!

Czytaj również:

  • OSPF, czyli Open Shortest Path First, to protokół routingu używany do wymiany informacji o trasach w dużych sieciach. Jego głównym zadaniem jest optymalizacja transmisji danych, zapewniając wydajne i niezawodne wyszukiwanie najkrótszych ścieżek dla transmisji pakietów.

    Protokół ten działa w oparciu o zasadę algorytmu Dijkstry, co pozwala mu szybko określać najkorzystniejsze trasy. OSPF dzieli sieć na oddzielne obszary, co upraszcza zarządzanie i poprawia wydajność routingu. Każdy obszar ma swoje własne trasy, a informacje o nich są przekazywane między sąsiednimi routerami.

    Dzięki OSPF sieci mogą dynamicznie dostosowywać się do zmian, takich jak awarie sprzętu czy zmiany topologii. Dzięki temu protokół ten jest szczególnie przydatny dla dużych przedsiębiorstw i dostawców usług, gdzie wysoka dostępność i szybka reakcja na zmiany w sieci są istotne.

  • Serwer to wyspecjalizowany komputer lub system zaprojektowany do przetwarzania żądań i świadczenia różnych usług innym komputerom, zwanym klientami. Główną funkcją serwera jest przechowywanie, przetwarzanie i przesyłanie informacji, zapewniając dostęp do danych i zasobów.

    Działanie serwera opiera się na modelu klient-serwer. Gdy klient wysyła żądanie, serwer je odbiera, przetwarza i zwraca niezbędne dane. Może to odbywać się w czasie rzeczywistym, a serwery mogą obsługiwać wiele żądań jednocześnie.

    Istnieje kilka typów serwerów, z których każdy ma swoje własne, unikalne zadanie. Na przykład serwery WWW odpowiadają za przechowywanie i przesyłanie stron WWW, serwery plików służą do przechowywania i zarządzania plikami, a serwery poczty elektronicznej obsługują pocztę elektroniczną, umożliwiając wysyłanie i odbieranie wiadomości. Inne typy obejmują serwery rdzeniowe, serwery gier i serwery wirtualne, z których każdy służy określonym celom w zależności od potrzeb użytkowników i aplikacji.

  • Model OSI to struktura koncepcyjna, która dzieli proces transmisji danych na siedem warstw. Każda z tych warstw pełni swoje unikalne funkcje i współdziała z sąsiednimi warstwami, tworząc spójny system. Głównym celem modelu jest standaryzacja interakcji sieciowych, umożliwiająca różnym urządzeniom i protokołom współpracę pomimo różnic w ich architekturze.

    Podział na warstwy pomaga uprościć złożone procesy sieciowe, czyniąc je bardziej zrozumiałymi i łatwymi w zarządzaniu. Każda warstwa modelu OSI odpowiada za określone zadania, od fizycznej transmisji bitów w warstwie dolnej po świadczenie usług użytkownikowi końcowemu w warstwie górnej. Ten podział promuje bardziej efektywne rozwiązywanie problemów, rozwój nowych technologii i uproszczone procesy integracji, ponieważ zmiany na jednym poziomie nie wpływają na inne.

    W ten sposób model OSI służy jako podstawa do zrozumienia i rozwoju technologii sieciowych, umożliwiając programistom i inżynierom tworzenie bardziej kompatybilnych i wydajnych systemów.