Narzędzia użytkownika

Narzędzia witryny


sk2:mail

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
sk2:mail [2025/01/14 04:07]
jkonczak utworzono
sk2:mail [2025/01/16 22:20] (aktualna)
jkonczak [Komendy]
Linia 1: Linia 1:
 +<​html>​
 +<​style>​
 +code {white-space:​ pre-wrap}
 +pre.compact {line-height:​ 1em; padding: .25em .5em}
 +</​style>​
 +</​html>​
 +
 === Wyłączanie echo w terminalu === === Wyłączanie echo w terminalu ===
  
 Możesz dowiedzieć się który terminal jest używany przez twoją powłokę wykonując: Możesz dowiedzieć się który terminal jest używany przez twoją powłokę wykonując:
-\\ 
 ''​echo $TTY''​ ''​echo $TTY''​
 +\\
 W dowolnym momencie możesz z innego terminala wykonać komendę która spowoduje W dowolnym momencie możesz z innego terminala wykonać komendę która spowoduje
 wyłączenie bądź włączenie wyświetlania wpisanych przez znaków: wyłączenie bądź włączenie wyświetlania wpisanych przez znaków:
Linia 18: Linia 24:
  
 W trakcie przesyłania wiadomości e-mail między serwerami SMTP najpierw ​ W trakcie przesyłania wiadomości e-mail między serwerami SMTP najpierw ​
-przesyłana jest są adresy z "​koperty"​ (envelope), potem jej zawartość (contents).+przesyłane są adresy z "​koperty"​ (envelope), potem jej zawartość (contents).
 \\ \\
 Zawartość (contents) każdej wiadomość e-mail składa się z nagłówków (headers) Zawartość (contents) każdej wiadomość e-mail składa się z nagłówków (headers)
Linia 24: Linia 30:
  
 <​html>​ <​html>​
-<pre style="​margin-top:​-1.2em; line-height:​ 1em">​ +<​pre ​class="​compact" ​style="​margin-top:​-1.2em">​ 
-<​b>​MAIL FROM:&​lt;</​b>​grey@cat.baz<​b>&​gt;</​b> ​                                     <span style="​color:​gray">​\ envelope</​span>​ +<​b>​MAIL FROM:&​lt;</​b>​grey@cat.baz<​b>&​gt;</​b> ​                                 <span style="​color:​gray">​\ envelope</​span>​ 
-<​b>​RCPT TO:&​lt;</​b>​john@example.com<​b>&​gt;</​b> ​                                   <span style="​color:​gray">/​ ("​koperta"​)</​span>​+<​b>​RCPT TO:&​lt;</​b>​john@example.com<​b>&​gt;</​b> ​                               <span style="​color:​gray">/​ ("​koperta"​)</​span>​
 <​b>​DATA</​b>​ <​b>​DATA</​b>​
-<span style="​color:​navy">​From:​ Greebo &​lt;​grey@cat.baz&​gt; ​                  ​<span style="​color:​gray">​\ ​              ​\</​span>​ +<span style="​color:​navy">​From:​ Greebo &​lt;​grey@cat.baz&​gt; ​              ​<span style="​color:​gray">​\ ​              ​\</​span>​ 
-To: John Q. Public &​lt;​john@example.com&​gt; ​        ​<span style="​color:​gray">​| headers ​      | contents</​span>​ +To: John Q. Public &​lt;​john@example.com&​gt; ​    ​<span style="​color:​gray">​| headers ​      | contents</​span>​ 
-Date: Mon, 13 Jan 2025 03:00:00 +0100         ​<span style="​color:​gray">​| (nagłówki) ​   | ("​zawartość"​)</​span>​ +Date: Mon, 13 Jan 2025 03:00:00 +0100     ​<span style="​color:​gray">​| (nagłówki) ​   | ("​zawartość"​)</​span>​ 
-Subject: Khhhhhhhhhhhhh ​                      ​<span style="​color:​gray">/ ​              ​|</​span>​ +Subject: Khhhhhhhhhhhhh ​                  ​<span style="​color:​gray">/ ​              ​|</​span>​ 
-                                                         ​<span style="​color:​gray"> ​    ​|</​span>​ +                                                     ​<span style="​color:​gray"> ​    ​|</​span>​ 
-KhIIIIsss! ​                                   <span style="​color:​gray">​] body (treść) ​ /</​span>​+KhIIIIsss! ​                               <span style="​color:​gray">​] body (treść) ​ /</​span>​
 </​span><​b>​.</​b>​ </​span><​b>​.</​b>​
 </​pre>​ </​pre>​
Linia 39: Linia 45:
  
 Zauważ że używany do dostarczenia wiadomości adres odbiorcy znajduje się na Zauważ że używany do dostarczenia wiadomości adres odbiorcy znajduje się na
-"​kopercie"​. Adres docelowy ​który jest w nagłówkach w jej zawartości nie jest +"​kopercie"​. 
-brany pod uwagę przy ustalaniu dokąd wiadomość ma zostać wysłana.+\\ 
 +Adres docelowy ​nagłówków ​jej zawartości nie jest brany pod uwagę przy 
 +ustalaniu dokąd wiadomość ma zostać wysłana.
 \\ \\
 "​Koperta"​ jest tworzona tylko na czas wymiany zawartości między serwerami i "​Koperta"​ jest tworzona tylko na czas wymiany zawartości między serwerami i
-użytkownicy poczty nie widzą adresów które ​tam były podane (<​small>​choć serwer+użytkownicy poczty nie widzą adresów które były tam podane (<​small>​choć serwer
 odbierający może przepisać adres z //rcpt to// do nagłówka //​Received//</​small>​). odbierający może przepisać adres z //rcpt to// do nagłówka //​Received//</​small>​).
  
Linia 51: Linia 59:
  
 <​html><​div style="​margin-left:​0.5em;​padding-left:​0.5em;​border-left:​1px gray solid;​display:​block;​ margin-bottom:​ 0"></​html>​ <​html><​div style="​margin-left:​0.5em;​padding-left:​0.5em;​border-left:​1px gray solid;​display:​block;​ margin-bottom:​ 0"></​html>​
-Each line of characters MUST be no more than 998 characters, and SHOULD be no +//Each line of characters MUST be no more than 998 characters, and SHOULD be no 
-more than 78 characters, excluding the CRLF. +more than 78 characters, excluding the CRLF.// 
-[[https://​datatracker.ietf.org/​doc/​html/​rfc5322#​section-2.1.1#​section-2.3.1|[RFC dla formatu wiadomości e-mail]]]+<wrap right><​small>​[[https://​datatracker.ietf.org/​doc/​html/​rfc5322#​section-2.1.1#​section-2.3.1|[RFC dla formatu wiadomości e-mail]]]</​small></​wrap>​ 
 <​html></​div></​html>​ <​html></​div></​html>​
 Linie nagłówków można w razie potrzeby łamać na białych znakach, zostawiając Linie nagłówków można w razie potrzeby łamać na białych znakach, zostawiając
Linia 64: Linia 72:
  
 <​html><​div style="​margin-left:​0.5em;​padding-left:​0.5em;​border-left:​1px gray solid;​display:​block;​ margin-bottom:​ 0"></​html>​ <​html><​div style="​margin-left:​0.5em;​padding-left:​0.5em;​border-left:​1px gray solid;​display:​block;​ margin-bottom:​ 0"></​html>​
-Although SMTP extensions may relax this restriction for the content body, +//Although SMTP extensions may relax this restriction for the content body, 
-the content header fields are always encoded using the US-ASCII repertoire. +the content header fields are always encoded using the US-ASCII repertoire.// 
-[[https://​datatracker.ietf.org/​doc/​html/​rfc5321#​section-2.3.1|[RFC dla SMTP]]]+<wrap right><​small>​[[https://​datatracker.ietf.org/​doc/​html/​rfc5321#​section-2.3.1|[RFC dla SMTP]]]</​small></​wrap>​ 
 <​html></​div></​html>​ <​html></​div></​html>​
 W niektórych nagłówkach można użyć znaków spoza kodowania US-ASCII, ale muszą W niektórych nagłówkach można użyć znaków spoza kodowania US-ASCII, ale muszą
 one być odpowiednio zakodowane, używając składni //​encoded-word//​ opisanej w one być odpowiednio zakodowane, używając składni //​encoded-word//​ opisanej w
 odpowiednim [[https://​datatracker.ietf.org/​doc/​html/​rfc2047|dokumencie RFC]]. odpowiednim [[https://​datatracker.ietf.org/​doc/​html/​rfc2047|dokumencie RFC]].
-\\ 
-Np: ''​Mój przykładowy tekst''​ (gdzie w UTF-8 ''​ó''​ to binarnie ''​\0xC3\0xB3''​ a 
-''​ł''​ to ''​\xC5\x82''​) można w nagłówku //Subject// zakodować jako: \\ 
-''​=?​UTF-8?​Q?​M=C3=B3j?​= =?​UTF-8?​Q?​Przyk=C5=82adowy?​= tekst''​ lub ''​=?​UTF-8?​Q?​M=C3=B3j_przyk=C5=82adowy_tekst?​=''​ (używając //​__Q__uoted-Printable//​) lub ''​=?​UTF-8?​B?​TcOzaiBwcnp5a8WCYWRvd3kgdGVrc3Q=?​=''​ (używając //​__b__ase64//​). 
  
 +<​small>​
 +Np: ''​Mój przykładowy tekst''​ (gdzie w UTF-8 ''​ó''​ to binarnie ''​\0xC3\0xB3''​ a
 +''​ł''​ to ''​\0xC5\0x82''​) w nagłówku //Subject// można zakodować jako:
 +<​html><​div style="​margin-top:​-1.2em"></​div></​html>​
 +  * ''​=?​UTF-8?​Q?​M=C3=B3j?​= =?​UTF-8?​Q?​Przyk=C5=82adowy?​= tekst''​ (używając //​**q**uoted-printable//​)
 +  * ''​=?​UTF-8?​Q?​M=C3=B3j_przyk=C5=82adowy_tekst?​=''​ (jak wyżej, ale kodując wiele słów naraz i zastępując spację przez ''​_''​)
 +  * ''​=?​UTF-8?​B?​TcOzaiBwcnp5a8WCYWRvd3kgdGVrc3Q=?​=''​ (używając //​**b**ase64//​).
 +</​small>​
 === Podstawowe nagłówki === === Podstawowe nagłówki ===
  
Linia 99: Linia 111:
 === Wysłanie === === Wysłanie ===
  
-<​html><​pre style="​line-height:​1em;​font-family:​DejaVu Sans Mono;​margin-bottom:​0">​ +<​html><​pre ​class="​compact" ​style="​font-family:​DejaVu Sans Mono;​margin-bottom:​0;​margin-top:​-1.2em">​ 
- ​____ ​    ​┌─────┐ ​     ┌─────┐ ​     ┌─────┐ ​     ┌─────┐ ​     ┌─────┐ ​   .------.  + ​____ ​   ┌─────┐ ​     ┌─────┐ ​     ┌─────┐ ​     ┌─────┐ ​     ┌─────┐ ​   .------.  
-(mail) →  │ MUA │-→-→-→│ MSA │-→-→-→│ MTA │-→-→-→│ MTA │-→-→-→│ MDA │ → (skrzynka) +(mail) → │ MUA │-→-→-→│ MSA │-→-→-→│ MTA │-→-→-→│ MTA │-→-→-→│ MDA │ → (skrzynka) 
- ​‾‾‾‾ ​    ​└─────┘ SMTP └─────┘ SMTP └─────┘ SMTP └─────┘ SMTP └─────┘ ​   `------‘ + ​‾‾‾‾ ​   └─────┘ SMTP └─────┘ SMTP └─────┘ SMTP └─────┘ SMTP └─────┘ ​   `------‘ 
- +<div style="​margin-top:​-.5em"></​div>​ 
-                 ​\____/ ​      ​\_________________/ ​      ​\____/​  +                \____/ ​      ​\_________________/ ​      ​\____/​  
-                wysłanie ​         przekazanie ​        ​dostarcznie +               ​wysłanie ​         przekazanie ​        ​dostarcznie 
-              (submission) ​         (relay) ​          ​(delivery)+             ​(submission) ​         (relay) ​          ​(delivery)
 </​pre></​html>​ </​pre></​html>​
 Podział MTA na MSA, MTA i MDA jest umowny. Podział MTA na MSA, MTA i MDA jest umowny.
Linia 128: Linia 140:
 === Odbieranie === === Odbieranie ===
  
-<​html><​pre style="​line-height:​1em;​font-family:​DejaVu Sans Mono;​margin-bottom:​0">​+<​html><​pre ​class="​compact" ​style="​font-family:​DejaVu Sans Mono;​margin-bottom:​0;​margin-top:​-1.2em">
  ​.------. ​   ┌─────┐ ​          ​┌─────────┐  ​.------. ​   ┌─────┐ ​          ​┌─────────┐
 (skrzynka) ← │ MAA │  ←  ←  ←  │ MRA/MUA │ (skrzynka) ← │ MAA │  ←  ←  ←  │ MRA/MUA │
Linia 134: Linia 146:
 </​pre></​html>​ </​pre></​html>​
 Po tym jak wiadomość wyląduje w skrzynce, trzeba ją stamtąd pobrać. Po tym jak wiadomość wyląduje w skrzynce, trzeba ją stamtąd pobrać.
-Do tego używa się protokołów ​protokołu POP3 lub IMAP.+Do tego używa się protokołu POP3 lub IMAP.
  
 ===== Protokół SMTP ===== ===== Protokół SMTP =====
Linia 143: Linia 155:
 <​html><​div style="​margin-top:​-1.2em"></​div></​html>​ <​html><​div style="​margin-top:​-1.2em"></​div></​html>​
   - serwer przesyła do świeżo połączonego klienta powitanie zaczynające się od kodu ''​220''​   - serwer przesyła do świeżo połączonego klienta powitanie zaczynające się od kodu ''​220''​
-  - klient ​musi się przedstawić ​komendą ''​EHLO //​nazwa_domenowa//''​ (lub starszym ''​HELO //​nazwa_domenowa//''​) i poczekać ​na akceptację serwera +  - klient ​przedstawia ​się komendą ''​**EHLO** //​nazwa_domenowa//''​ (<​small>​lub starszym ''​HELO //​nazwa_domenowa//''​</​small>​) i czeka na akceptację serwera 
-  - klient może poprosić o uwierzytelnienie komendą ''​AUTH //​metoda//''​w wynikach komendy ''​EHLO''​ podane są wspierane przez serwer metody ​(<​small>​lista ustandaryzowanych metod jest [[https://​www.iana.org/​assignments/​sasl-mechanisms|tutaj]]</​small>​) +  - klient może poprosić o uwierzytelnienie komendą ''​**AUTH** //​metoda//'' ​\\ (w wynikach komendy ''​EHLO''​ podane są wspierane przez serwer metody<​small>​lista ustandaryzowanych metod jest [[https://​www.iana.org/​assignments/​sasl-mechanisms|tutaj]]</​small>​) 
-    * po wykonaniu ''​AUTH //​metoda//''​ klient musi poczekać na odpowiedźserwer zwróci albo kod 5xx określający że się nie zgadza, albo odpowiedź spodziewaną w wybranej metodzie+    * po wykonaniu ''​AUTH //​metoda//''​ klient musi poczekać na odpowiedź ​\\ serwer zwróci albo kod 5xx określający że się nie zgadza, albo odpowiedź spodziewaną w wybranej metodzie
     * serwer zwykle pozwala na uwierzytelnienie tylko jeżeli nawiązano z nim bezpieczne połączenie (TLS)     * serwer zwykle pozwala na uwierzytelnienie tylko jeżeli nawiązano z nim bezpieczne połączenie (TLS)
     * w powszechnie używanej metodzie ''​AUTH PLAIN'':​     * w powszechnie używanej metodzie ''​AUTH PLAIN'':​
       * serwer odsyła kod 334 i czeka na dane uwierzytelniające       * serwer odsyła kod 334 i czeka na dane uwierzytelniające
-      * klient musi przesłać nazwę użytkownika i hasło zapisane jako ''​\0//​użytkownik//​\0//​hasło//''​ i zakodowane w base64\\ aby przygotować dane dla metody //PLAIN//, możesz wykonać: \\ ''​echo -n "​User:";​ read -rs U; echo -n "\nPass:"; ​ read -rs P; echo; printf "​\0%s\0%s"​ "​$U"​ "​$P"​ | base64''​+      * klient musi przesłać nazwę użytkownika i hasło zapisane jako ''​\0//​użytkownik//​\0//​hasło//''​ i zakodowane w base64 \\ <​small>​aby przygotować dane dla metody //PLAIN//, możesz wykonać: \\ ''​echo -n "User: ";read U;echo -n "Pass:";​read -rs P;​echo;​printf "​\0%s\0%s"​ "​$U"​ "​$P"​|base64''​</​small>​
     * serwer po udanym uwierzytelnieniu odsyła odpowiedź z kodem 235     * serwer po udanym uwierzytelnieniu odsyła odpowiedź z kodem 235
-  - klient ​musi wysłać informację o nadawcy maila komendą ''​MAIL FROM://​nadawca//''​ i poczekać ​na akceptację serwera +  - klient ​wysyła informację o nadawcy maila komendą ''​**MAIL FROM**:<//nadawca//>''​ i czeka na akceptację serwera 
-  - klient ​musi wysłać informację o jednym odbiorcy maila komendą ''​RCPT TO://​odbiorca//''​ i poczekać ​na akceptację serwera+  - klient ​wysyła informację o jednym odbiorcy maila komendą ''​**RCPT TO**:<//​odbiorca//​>''​ i czeka na akceptację serwera
   - klient może wskazać kolejnego odbiorcę powtarzając komendę //RCPT TO// z kolejnymi adresami   - klient może wskazać kolejnego odbiorcę powtarzając komendę //RCPT TO// z kolejnymi adresami
-  - klient zgłasza że chce podać treść maila komendą ''​DATA''​ i czeka na odpowiedź od serwera (354) +  - klient zgłasza że chce podać treść maila komendą ''​**DATA**''​ i czeka na odpowiedź od serwera (354) 
-  - klient podaje treść maila, zakończoną liną składającą się z kropki \\ <​small>​jeżeli linia zaczyna się od kropki, serwer usuwa tą kropkę; ​więc żeby wysłać maila z linią złożoną z kropki, ​trzeba ​podać '​..'</​small>​+  - klient podaje treść maila, zakończoną liną składającą się z kropki \\ <​small>​jeżeli linia zaczyna się od kropki, ​to serwer usuwa tą kropkę; ​dlatego ​żeby wysłać maila z linią złożoną z kropki, ​można ​podać ​''..''</​small>​
   - po odebraniu ''​\r\n.\r\n''​ serwer wysyła akceptację do klienta   - po odebraniu ''​\r\n.\r\n''​ serwer wysyła akceptację do klienta
   - klient może wysłać kolejny mail (zaczynając znów od ''​MAIL FROM''​) lub zakończyć połączenie wysyłając komendę ''​QUIT''​   - klient może wysłać kolejny mail (zaczynając znów od ''​MAIL FROM''​) lub zakończyć połączenie wysyłając komendę ''​QUIT''​
Linia 167: Linia 179:
   ​   ​
 Przykład komunikacji:​ Przykład komunikacji:​
-<​html><​div style="​margin-top:​-1.2em"​></​div></​html>​ +<​html><​pre class="​compact" ​style="​margin-top:​-1.2em">​
-<​html><​pre>+
 <span style="​color:#​007">​220 example.org ESMTP</​span>​ <span style="​color:#​007">​220 example.org ESMTP</​span>​
 <span style="​color:#​700">​EHLO sub.domain.baz</​span>​ <span style="​color:#​700">​EHLO sub.domain.baz</​span>​
Linia 178: Linia 189:
 <span style="​color:#​700">​AHVzZXIAcGFzc3dvcmQ=</​span>​ <span style="​color:#​700">​AHVzZXIAcGFzc3dvcmQ=</​span>​
 <span style="​color:#​007">​235 Authentication succeeded</​span>​ <span style="​color:#​007">​235 Authentication succeeded</​span>​
-<span style="​color:#​700">​MAIL FROM:​user@example.org</​span>​+<span style="​color:#​700">​MAIL FROM:&lt;user@example.org&gt;</​span>​
 <span style="​color:#​007">​250 OK</​span>​ <span style="​color:#​007">​250 OK</​span>​
-<span style="​color:#​700">​RCPT TO:​friend@example.org</​span>​+<span style="​color:#​700">​RCPT TO:&lt;friend@example.org&gt;</​span>​
 <span style="​color:#​007">​250 Accepted</​span>​ <span style="​color:#​007">​250 Accepted</​span>​
-<span style="​color:#​700">​RCPT TO:​mellon@doriath.mi</​span>​+<span style="​color:#​700">​RCPT TO:&lt;mellon@doriath.mi&gt;</​span>​
 <span style="​color:#​007">​250 Accepted</​span>​ <span style="​color:#​007">​250 Accepted</​span>​
 <span style="​color:#​700">​DATA</​span>​ <span style="​color:#​700">​DATA</​span>​
Linia 204: Linia 215:
 ==== Porty używane przez SMTP ==== ==== Porty używane przez SMTP ====
  
-SMTP używa portów:+SMTP używa portów ​TCP:
   * 25 (''​smtp''​) do nieszyfrowanych połączeń   * 25 (''​smtp''​) do nieszyfrowanych połączeń
   * <​small>​25 (''​smtp''​) do szyfrowanych połączeń (TLS), ustanawianych po użyciu komendy ''​STARTTLS''​ na nieszyfrowanym połączeniu</​small>​   * <​small>​25 (''​smtp''​) do szyfrowanych połączeń (TLS), ustanawianych po użyciu komendy ''​STARTTLS''​ na nieszyfrowanym połączeniu</​small>​
Linia 211: Linia 222:
   * 587 (''​submission''​) do szyfrowanych połączeń (TLS), ustanawianych po użyciu komendy ''​STARTTLS''​ na nieszyfrowanym połączeniu   * 587 (''​submission''​) do szyfrowanych połączeń (TLS), ustanawianych po użyciu komendy ''​STARTTLS''​ na nieszyfrowanym połączeniu
   * <​small>​2525 (bez nazwy) niestandardowy port, używany w przypadku jeśli port 25 jest niedostępny</​small>​   * <​small>​2525 (bez nazwy) niestandardowy port, używany w przypadku jeśli port 25 jest niedostępny</​small>​
 +<​html><​div style="​margin-top:​-1.2em"></​div></​html>​
 <​small>​(Zobacz też: https://​www.cloudflare.com/​learning/​email-security/​smtp-port-25-587/​)</​small>​ <​small>​(Zobacz też: https://​www.cloudflare.com/​learning/​email-security/​smtp-port-25-587/​)</​small>​
  
Linia 221: Linia 233:
  
 <​small>​ <​small>​
-Połączenie od razu z szyfrowania ​można wykonać np. programem ''​socat''​ lub ''​openssl'':​+ 
 +Połączenie od razu z szyfrowaniem ​można wykonać np. programem ''​socat''​ lub ''​openssl'':​
 \\ \\
 ''​socat ssl://​adres_serwera//:​smtps,​crlf readline''​ \\ ''​socat ssl://​adres_serwera//:​smtps,​crlf readline''​ \\
 ''​openssl s_client -quiet -verify_quiet -crlf //​adres_serwera//:​smtps''​ ''​openssl s_client -quiet -verify_quiet -crlf //​adres_serwera//:​smtps''​
 +
 </​small>​ </​small>​
  
Linia 235: Linia 249:
 z serwerem SMTP po podaniu komendy: z serwerem SMTP po podaniu komendy:
 \\ \\
-''​openssl s_client -quiet -verify_quiet -crlf -starttls smtp //​adres_serwera//:​submission''​+''​openssl s_client -quiet -verify_quiet -crlf **-starttls smtp** //​adres_serwera//:​**submission**''​
 \\ \\
 <​small>​Można też wskazać własną nazwę wpisywaną do komendy EHLO przez: \\ <​small>​Można też wskazać własną nazwę wpisywaną do komendy EHLO przez: \\
-''​openssl s_client -quiet -verify_quiet -crlf -starttls smtp -name //nazwa_domenowa_do_ehlo// //​adres_serwera//:​submission''</​small>​+''​openssl s_client -quiet -verify_quiet -crlf -starttls smtp -name //nazwa_do_ehlo// //​adres_serwera//:​submission''</​small>​
 \\ \\
 Po nawiązaniu połączenia TLS klient powinien ponownie wysłać komendę ''​EHLO''​ Po nawiązaniu połączenia TLS klient powinien ponownie wysłać komendę ''​EHLO''​
Linia 266: Linia 280:
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
-Przygotuj polecenia które będziesz musiał wpisać żeby wysłać mail ze swojej +Przygotuj polecenia które będziesz musiał wpisać żeby się uwierzytelnić metodą 
-poczty studenckiej (albo innej własnej poczty) ​z uwierzytelnieniem metodą PLAIN+PLAIN i wysłać mail ze swojej poczty studenckiej (albo innej własnej poczty) ​
 do adresów dwóch osób siedzących obok (<​small>​lub do innych swoich adresów, wedle do adresów dwóch osób siedzących obok (<​small>​lub do innych swoich adresów, wedle
 uznania</​small>​). \\ uznania</​small>​). \\
Linia 287: Linia 301:
     * wysyła komendę ''​USER //​nazwa//''​ i komendę ''​PASS //​hasło//'' ​     * wysyła komendę ''​USER //​nazwa//''​ i komendę ''​PASS //​hasło//'' ​
     * wysyła komendę ''​AUTH //​metoda//''​ (podobnie jak dla SMTP), np. ''​AUTH PLAIN'',​ po której wysyła dane uwierzytelniające     * wysyła komendę ''​AUTH //​metoda//''​ (podobnie jak dla SMTP), np. ''​AUTH PLAIN'',​ po której wysyła dane uwierzytelniające
-  - klient wysyła komendę ''​LIST'' ​(lub opcjonalnie wspierane ''​UIDL''​) ​i dostaje listę numerów wiadomości ​(lub listę numerów wraz z unikalnym identyfikatorem wiadomości)+  - klient wysyła komendę ''​LIST''​ i dostaje listę numerów wiadomości ​\\ lub komendę ''​UIDL''​ zwracającą ​listę numerów wraz z unikalnym identyfikatorem wiadomości
   - klient wysyła komendę ''​RETR //​numer//''​ pobierającą wiadomość o podanym numerze (tyle razy ile potrzebuje)   - klient wysyła komendę ''​RETR //​numer//''​ pobierającą wiadomość o podanym numerze (tyle razy ile potrzebuje)
   - klient wysyła komendę ''​DELE //​numer//''​ zaznaczając wiadomość o podanym numerze jako do usunięcia (tyle razy ile potrzebuje)   - klient wysyła komendę ''​DELE //​numer//''​ zaznaczając wiadomość o podanym numerze jako do usunięcia (tyle razy ile potrzebuje)
Linia 298: Linia 312:
 pobierającą nagłówki i pierwsze //N// linii treści wiadomości (''​TOP''​) oraz pobierającą nagłówki i pierwsze //N// linii treści wiadomości (''​TOP''​) oraz
 wyświetlającą które z opcjonalnych funkcji są wspierane przez serwer (''​CAPA''​). wyświetlającą które z opcjonalnych funkcji są wspierane przez serwer (''​CAPA''​).
 +\\
 <​small>​Więcej w RFC [[https://​datatracker.ietf.org/​doc/​html/​rfc1939|dla POP3]] <​small>​Więcej w RFC [[https://​datatracker.ietf.org/​doc/​html/​rfc1939|dla POP3]]
 i [[https://​datatracker.ietf.org/​doc/​html/​rfc2449|rozszerzeń do POP3]].</​small>​ i [[https://​datatracker.ietf.org/​doc/​html/​rfc2449|rozszerzeń do POP3]].</​small>​
Linia 312: Linia 326:
 usunął je z serwera zwalniając miejsce na kolejne maile. Tworząc ten protokół usunął je z serwera zwalniając miejsce na kolejne maile. Tworząc ten protokół
 nie przewidziano korzystania z poczty na wielu komputerach ani istnienia nie przewidziano korzystania z poczty na wielu komputerach ani istnienia
-klientów pocztowych innych niż lokalny program (protokół ​powstawał rok przed+klientów pocztowych innych niż lokalny program (protokół ​powstał rok przed
 HTTP). HTTP).
  
Linia 329: Linia 343:
 \\ \\
 Przykładowa komunikacja w której klient wybrał tagi ''​foo''​ i ''​baz'':​ Przykładowa komunikacja w której klient wybrał tagi ''​foo''​ i ''​baz'':​
-<​html><​pre style="​margin-bottom:​0">​+<​html><​pre ​class="​compact" ​style="​margin-top:​-1.2em; ​margin-bottom:​0">​
 <span style="​color:#​700"><​b>​foo</​b>​ search subject "​SK2"</​span>​ <span style="​color:#​700"><​b>​foo</​b>​ search subject "​SK2"</​span>​
 <span style="​color:#​700"><​b>​baz</​b>​ search subject "​sieci"</​span>​ <span style="​color:#​700"><​b>​baz</​b>​ search subject "​sieci"</​span>​
Linia 354: Linia 368:
   - klient wysyła komendę ''​CAPABILITY'',​ dostaje w odpowiedzi możliwości serwera   - klient wysyła komendę ''​CAPABILITY'',​ dostaje w odpowiedzi możliwości serwera
   - klient uwierzytelnia się, wykonując jedno z:   - klient uwierzytelnia się, wykonując jedno z:
-    * wysyła komendę ''​LOGIN //nazwa// //​hasło//'' ​+    * wysyła komendę ''​**LOGIN** //nazwa// //​hasło//'' ​
     * wysyła komendę ''​AUTHENTICATE //​metoda//''​ (podobnie jak dla SMTP), np. ''​AUTHENTICATE PLAIN'',​ po której wysyła dane uwierzytelniające     * wysyła komendę ''​AUTHENTICATE //​metoda//''​ (podobnie jak dla SMTP), np. ''​AUTHENTICATE PLAIN'',​ po której wysyła dane uwierzytelniające
   - zalogowany klient może między innymi:   - zalogowany klient może między innymi:
Linia 360: Linia 374:
     * stworzyć, zmienić nazwę czy usunąć katalogi     * stworzyć, zmienić nazwę czy usunąć katalogi
     * czekać na przyjście nowych wiadomości (o tym jest dalej w materiałach)     * czekać na przyjście nowych wiadomości (o tym jest dalej w materiałach)
-    * dodać nową wiadomość do wskazanego katalogu, np. dodać szkic wiadomości +    * dodać nową wiadomość do wskazanego katalogu, np. umieścić nową wiadomość w katalogu //\Drafts// 
-  - klient wybiera katalog który chce otworzyć w trybie zapisu i odczytu komendą ''​SELECT //​nazwa//''​ lub trybie tylko do odczytu komendą ''​EXAMINE //​nazwa//''​ +  - klient wybiera katalog który chce otworzyć
-  - po wybraniu ​katalogi, klient może: +    * w trybie zapisu i odczytu komendą ''​**SELECT** //​nazwa//''​lub 
-    * pobrać wiadomość bądź jej wskazane części komendą ''​FETCH …'', ​\\ np: ''​fetch 5 FULL''​ pobierze wszystkie metadane wiadomości nr 5, ''​fetch 6 BODY[]''​ pobierze zawartość wiadomości nr 6, ''​fetch 100:200 BODY[HEADER.FIELDS (FROM TO DATE SUBJECT)]''​ pobierze nagłówki //From//, //To//, //Date// i //​Subject// ​dla wiadomości od 100 do 200 \\  <​small>​ Komenda ''​Fetch''​ jest [[ https://​datatracker.ietf.org/​doc/​html/​rfc3501#​page-55|rozbudowana]] tak by w sprawny sposób można było przeglądać wiadomości bez ściągania z wszystkich wiadomości serwera</​small>​ +    * w trybie tylko do odczytu komendą ''​EXAMINE //​nazwa//''​ 
-    * zmienić flagi wiadomości komendą ''​STORE …'', ​\\ np. ''​STORE ​42 +FLAGS (\Deleted)'' ​dodaje ​(patrz: ​''​+''​) ​jedyną w podanym zbiorze (patrz: ''​(…)''​) flagę ​do wiadomości nr 42 określającą że wiadomość jest usunięta ​(''​\Deleted''​) \\ np. ''​STORE 56 +FLAGS (\Seen \Answered)''​ doda dwie flagi, ​''​STORE 10:50 -FLAGS (\Flagged)''​ usunie oznaczenie wiadomości jako ważnej dla wiadomości od 10 do 50  +  - po wybraniu ​katalogu, klient może: 
-    * usunąć wiadomości z ustawioną flagą ​''​\Deleted'' ​komendą ''​EXPUNGE''​ +    * pobrać wiadomość bądź jej wskazane części komendą ''​**FETCH** …'',​ np: \\ ''​fetch 5 FULL''​ pobierze wszystkie metadane wiadomości nr 5, \\ ''​fetch 6:8 BODY[]''​ pobierze zawartość wiadomości nr 6, 7 i 8, \\ ''​fetch 100:200 BODY[HEADER.FIELDS (FROM TO DATE SUBJECT)]''​ pobierze nagłówki //From//, //To//, //Date// i //Subject// \\  <​small>​ Komenda ''​Fetch''​ jest [[ https://​datatracker.ietf.org/​doc/​html/​rfc3501#​page-55|rozbudowana]] tak by w sprawny sposób można było przeglądać wiadomości bez ściągania z wszystkich wiadomości serwera</​small>​ 
-    * wyszukać wiadomości komendą ''​SEARCH …'', ​\\ np. ''​SEARCH UNSEEN''​ pokaże identyfikatory nieprzeczytanych wiadomości,​ ''​SEARCH SUBJECT "​foo"''​ pokaże identyfikatory wiadomości które w tytule mają ciąg znaków ''​foo''​ \\ <​small>​Komenda ''​SEARCH''​ ma spore możliwości,​ patrz [[https://​datatracker.ietf.org/​doc/​html/​rfc3501#​page-51|RFC]];​ ta komenda ma pozwalać przeszukać skrzynkę bez ściągania z serwera wszystkich wiadomości</​small>​+    * zmienić flagi wiadomości komendą ''​**STORE** …'',​ np. \\ ''​STORE ​56 +FLAGS (\Seen \Answered)'' ​doda (''​+''​) do wiadomości nr 42 obie flagi z podanego zbioru ​(''​(…)''​)\\ ''​STORE 10:50 -FLAGS (\Flagged)''​ usunie oznaczenie wiadomości jako ważnej dla wiadomości od 10 do 50, \\ ''​STORE 42 +FLAGS (\Deleted)''​ dodaje flagę określającą że wiadomość jest usunięta, 
 +    * usunąć wiadomości z ustawioną flagą ​//\Deleted// komendą ''​EXPUNGE''​ 
 +    * wyszukać wiadomości komendą ''​**SEARCH** …'',​ np. \\ ''​SEARCH UNSEEN''​ pokaże identyfikatory nieprzeczytanych wiadomości, ​\\  ​''​SEARCH SUBJECT "​foo"''​ pokaże identyfikatory wiadomości które w tytule mają ciąg znaków ''​foo''​ \\ <​small>​Komenda ''​SEARCH''​ ma spore możliwości,​ patrz [[https://​datatracker.ietf.org/​doc/​html/​rfc3501#​page-51|RFC]];​ ta komenda ma pozwalać przeszukać skrzynkę bez ściągania z serwera wszystkich wiadomości</​small>​
     * skopiować bądź przenieść wiadomość do innego katalogu     * skopiować bądź przenieść wiadomość do innego katalogu
     * wrócić do stanu zalogowanego komendą ''​UNSELECT''​     * wrócić do stanu zalogowanego komendą ''​UNSELECT''​
-  - do zakończenia pracy klient używa komendy ​'''​LOGOUT''  ​+  - do zakończenia pracy klient używa komendy ''​LOGOUT''  ​
  
 IMAP używa dwóch numerów wiadomości:​ kolejnych numerów w skrzynce, zmieniających IMAP używa dwóch numerów wiadomości:​ kolejnych numerów w skrzynce, zmieniających
Linia 376: Linia 392:
 \\ \\
 Jeżeli komendy ''​STORE'',​ ''​FETCH'',​ ''​SEARCH'',​ … zostaną Jeżeli komendy ''​STORE'',​ ''​FETCH'',​ ''​SEARCH'',​ … zostaną
-poprzedzone komendą ''​UID'',​ to operują na unikalnych identyfikatorach.+poprzedzone komendą ​**''​UID''​**, to operują na unikalnych identyfikatorach. 
 +<​html><​!-- 
 +++++ foo|<pre class="​compact"​ style="​margin-top:​-1.2em">​ 
 +<span style="​color:#​700">​a001 uid search all</​span>​ 
 +<span style="​color:#​007">​* SEARCH 1 2 3 4 5</​span>​ 
 +<span style="​color:#​007">​a001 OK Search completed</​span>​ 
 +<span style="​color:#​700">​a002 search all</​span>​ 
 +<span style="​color:#​007">​* SEARCH 1 2 3 4 5</​span>​ 
 +<span style="​color:#​007">​a002 OK Search completed</​span>​ 
 +<span style="​color:#​700">​a003 store 1,4 +flags (\deleted)</​span>​ 
 +<span style="​color:#​007">​* 1 FETCH (FLAGS (\Deleted \Seen \Answered))</​span>​ 
 +<span style="​color:#​007">​* 4 FETCH (FLAGS (\Deleted \Seen))</​span>​ 
 +<span style="​color:#​700">​a003 OK Store completed</​span>​ 
 +<span style="​color:#​700">​a004 expunge</​span>​ 
 +<span style="​color:#​007">​* 3 EXPUNGE</​span>​ 
 +<span style="​color:#​007">​a004 OK Expunge completed</​span>​ 
 +<span style="​color:#​700">​a005 uid search all</​span>​ 
 +<span style="​color:#​007">​* SEARCH 2 3 5</​span>​ 
 +<span style="​color:#​007">​a005 OK Search completed</​span>​ 
 +<span style="​color:#​700">​a006 search all</​span>​ 
 +<span style="​color:#​007">​* SEARCH 1 2 3</​span>​ 
 +<span style="​color:#​007">​a006 OK Search completed</​span>​ 
 +</​pre>​ 
 +++++ 
 +--> 
 +</​html>​
 \\ \\
 Po wybraniu katalogu klient zawsze dostaje informację o tym jaki UID zostanie Po wybraniu katalogu klient zawsze dostaje informację o tym jaki UID zostanie
-nadany kolejnej wiadomości, co pozwala np. zorientować się jakie wiadomości +nadany kolejnej wiadomości.
-pojawiły się od ostatniego sprawdzania poczty.+
 \\ \\
 Przy okazji każdej odpowiedzi serwer może przesłać dodatkowo np. linię Przy okazji każdej odpowiedzi serwer może przesłać dodatkowo np. linię
Linia 386: Linia 426:
 //num//. //num//.
     ​     ​
 +Protokół IMAP pozwala zarówno ściągać całe maile (czyli zastąpić protokół POP3),
 +jaki i pozwala klientom pocztowym (również w formie "​aplikacji"​ webowych) między
 +innymi pobrać wybrane nagłówki (From, Subject i Date) i flagi (przeczytane,​
 +ważne, odpowiedziano) stu najnowszych maili, pobrać wybrane części wiadomości
 +(np. treść bez załączników),​ czy wyszukać numery maili które w
 +temacie/​treści/​nadawcy/​… mają podany ciąg znaków.
 +
 W IMAP kiedykolwiek po zalogowaniu klient może też wysłać komendę **''​IDLE''​** W IMAP kiedykolwiek po zalogowaniu klient może też wysłać komendę **''​IDLE''​**
 ([[https://​datatracker.ietf.org/​doc/​html/​rfc2177.html|RFC]]). W odpowiedzi na ([[https://​datatracker.ietf.org/​doc/​html/​rfc2177.html|RFC]]). W odpowiedzi na
Linia 398: Linia 445:
  
 Przykład komunikacji:​ Przykład komunikacji:​
-<​html><​div style="​margin-top:​-1.2em"​></​div></​html>​ +<​html><​pre class="​compact" ​style="​margin-top:​-1.2em">​
-<​html><​pre>+
 <span style="​color:#​700">​A CAPABILITY</​span>​ <span style="​color:#​700">​A CAPABILITY</​span>​
 <span style="​color:#​007">​* CAPABILITY IMAP4rev1 IDLE UNSELECT</​span>​ <span style="​color:#​007">​* CAPABILITY IMAP4rev1 IDLE UNSELECT</​span>​
Linia 452: Linia 498:
 <span style="​color:#​007">​+ idling</​span>​ <span style="​color:#​007">​+ idling</​span>​
 <span style="​color:#​007">​* 51 EXISTS</​span>​ <span style="​color:#​007">​* 51 EXISTS</​span>​
-<span style="​color:#​007">​DONE</​span>​+<span style="​color:#​700">​DONE</​span>​
 <span style="​color:#​007">​J OK IDLE completed</​span>​ <span style="​color:#​007">​J OK IDLE completed</​span>​
-<span style="​color:#​700">​K ​LOGOUT</​span>​ +<span style="​color:#​700">​K ​FETCH 51 (INTERNALDATE BODYSTRUCTURE ENVELOPE)</​span>​ 
-<span style="​color:#​007">​* ​BYE mail.example.org server closing connection</​span>​ +<span style="​color:#​007">​* ​51 FETCH (INTERNA… ​</​span>​ 
-<span style="​color:#​007">​K OK LOGOUT completed</​span>​+<span style="​color:#​007">​</​span>​
 </​pre>​ </​pre>​
 </​html>​ </​html>​
Linia 473: Linia 519:
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
 Połącz się do swojej poczty studenckiej używając IMAP i znajdź nieprzeczytane Połącz się do swojej poczty studenckiej używając IMAP i znajdź nieprzeczytane
-wiadomości w katalogu ''​Inbox''​.+wiadomości w katalogu ''​Inbox''​. ​(Jeżeli nie masz nieprzeczytanych wiadomości,​ 
 +poszukaj wiadomości na które nie wysłałeś odpowiedzi, tzn. ''​UNANSWERED''​.)
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 490: Linia 537:
 Wstępne przetworzenie maili trafiających do skrzynki na serwerze, np. wrzucanie Wstępne przetworzenie maili trafiających do skrzynki na serwerze, np. wrzucanie
 do wybranych folderów na podstawie ustawionych filtrów, umożliwiają skrypty do wybranych folderów na podstawie ustawionych filtrów, umożliwiają skrypty
-sieve (patrz: [[https://​datatracker.ietf.org/​doc/​html/​rfc5228|RFC]] +sieve (patrz: [[https://​datatracker.ietf.org/​doc/​html/​rfc5228|RFC]] ​i 
-[[http://sieve.info/|strona "​domowa"​]]) które można konfigurować używając+[[https://proton.me/support/​sieve-advanced-custom-filters|sensowy opis 
 +ważniejszych elementów języka]]) które można konfigurować ​np. używając
 [[https://​datatracker.ietf.org/​doc/​html/​rfc5804|dedykowanego do tego protokołu]]. [[https://​datatracker.ietf.org/​doc/​html/​rfc5804|dedykowanego do tego protokołu]].
 \\ \\
Linia 513: Linia 561:
   * zwykle zawiera identyfikator pozwalający znaleźć w logach serwera informacje o tej wiadomości,​   * zwykle zawiera identyfikator pozwalający znaleźć w logach serwera informacje o tej wiadomości,​
   * może zawierać, za słowem kluczowym ''​for''​ informację o adresie wpisanym w ''​RCPT TO''​ z "​koperty"​ SMTP.   * może zawierać, za słowem kluczowym ''​for''​ informację o adresie wpisanym w ''​RCPT TO''​ z "​koperty"​ SMTP.
 +
 +<​small>​
 +
 +++++ Przykładowa skomplikowana historia maila |
 +<​html>​
 +<span style="​color:#​700">​Mail kierowany do <​i>​smith@example.com</​i>​ został
 +przeskanowany programem antywirusowym i wysłany do adresata,</​span>​
 +<span style="​color:#​070">​skąd został przekierowany do adresu <​i>​littlejimmy@example.com</​i>,</​span>​
 +<span style="​color:#​007">​skąd został przesłany do adresu <​i>​user@example.org</​i>​.</​span>​
 +I każdy kolejny serwer SMTP dodał własny nagłówek:
 +<span style="​color:#​007">​
 +<pre class="​compact"​ style="​margin:​0">​
 +<span style="​color:#​007">​Return-path:​ &​lt;​user+abc =example=example.org@gmail.com&​gt;​
 +Received: from mail-yb1-xb2c.google.com ([2607:​f8b0:​4864:​20::​b2c])
 +    by mail.example.org with esmtps ​ (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 +    (Exim 4.96)
 +    (envelope-from &​lt;​user+abc_=example=example.org@gmail.com)
 +    id 1tWaLw-005ThV-0Q
 +    for user@example.org;​
 +    Sat, 11 Jan 2025 13:12:33 +0100
 +Received: by mail-yb1-xb2c.google.com with SMTP id 3f1490d57ef6-e3c8ae3a3b2so3989188276.0
 +        for &​lt;​user@example.org&​gt;;​ Sat, 11 Jan 2025 04:12:31 -0800 (PST)
 +</​span><​span style="​color:#​070">​Received:​ by 2002:​a05:​6918:​2743:​b0:​29e:​22a8:​4a84 with SMTP id kl3csp727682ysb;​
 +        Sat, 11 Jan 2025 04:11:26 -0800 (PST)
 +Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41])
 +        by mx.google.com with SMTPS id 4fb4d7f45d1cf-5d98fe87a9fsor2448019a12.0.2025.01.11.04.11.25
 +        for &​lt;​littlejimmy@example.com&​gt;​
 +        (Google Transport Security);
 +        Sat, 11 Jan 2025 04:11:25 -0800 (PST)
 +</​span><​span style="​color:#​700">​Received:​ by 2002:​a05:​7412:​4:​b0:​139:​5231:​8a71 with SMTP id 4csp730573rdb;​
 +        Sat, 11 Jan 2025 04:11:23 -0800 (PST)
 +Received: from mail22.atl91.mcsv.net (mail22.atl91.mcsv.net. [198.2.130.22])
 +        by mx.google.com with ESMTPS id 3f1490d57ef6-e55be2b386esi2450299276.511.2025.01.11.04.11.22
 +        for &​lt;​smith@example.com&​gt;​
 +        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/​256);​
 +        Sat, 11 Jan 2025 04:11:22 -0800 (PST)
 +Received: from mail22.atl91.mcsv.net ([127.0.0.1])
 +        by localhost (mail22.atl91.mcsv.net [127.0.0.1]) (amavisd-new,​ port 10026)
 +        with ESMTP id vi1BlmqBCQOU;​ Sat, 11 Jan 2025 12:11:22 +0000
 +Received: from localhost (localhost [127.0.0.1])
 +        by mail22.atl91.mcsv.net (Postfix) with ESMTP id BC4FCE0BA6
 +        for &​lt;​smith@example.com&​gt;;​ Sat, 11 Jan 2025 12:11:20 +0000</​span>​
 +</​pre>​
 +</​html>​
 +++++
 +
 +</​small>​
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 526: Linia 621:
  
 Nagłówki z adresami mają składnię ''​Nagłówek:​ nazwa <​adres>​[,​ …]'',​ np. \\ Nagłówki z adresami mają składnię ''​Nagłówek:​ nazwa <​adres>​[,​ …]'',​ np. \\
-''​To:​ John Q. Public %%<​john@example.com>,​ <​smith@example.com>​%%''​+''​To: ​"John Q. Public" ​%%<​john@example.com>,​ <​smith@example.com>​%%''​
  
 Poza oczywistymi //From//, //To//, //Cc// i //Bcc// używa się też nagłówków Poza oczywistymi //From//, //To//, //Cc// i //Bcc// używa się też nagłówków
Linia 579: Linia 674:
  
 Jeżeli wiadomość składa się z więcej niż jednej części, używa się specjalnych Jeżeli wiadomość składa się z więcej niż jednej części, używa się specjalnych
-typów \\ ''​Content-Type:​ multipart/​…;​ boundary=//​separator//''​.+typów \\ ''​Content-Type:​ multipart/​…;​ boundary="//​separator//​"''​.
  
 Te typy wskazują że treść to więcej niż jedna część i ustawiają separator Te typy wskazują że treść to więcej niż jedna część i ustawiają separator
-oddzielający te części na ''​--//​separator//''​. +oddzielający te części na ''​--//​separator//'' ​(i za ostatnią częścią 
-\\ +na ''​--//​separator//​--''​). 
-Powszechnie wykorzystuje się kilka takich typów, np. ''​mixed'' ​''​alternate''​.+Powszechnie wykorzystuje się kilka takich typów, np. ''​mixed'' ​czy  ​''​alternate''​ 
 +(<​small>​więcej na [[https://​en.wikipedia.org/​wiki/​MIME#​Multipart_subtypes|wikipedii]]</​small>​).
  
 Każda część wiadomości ma powinna mieć powtórzony nagłówek //​Content-Type//​ Każda część wiadomości ma powinna mieć powtórzony nagłówek //​Content-Type//​
Linia 597: Linia 693:
  
 Przykład takiej treści: Przykład takiej treści:
-<​html><​div style="​margin-top:​-1.2em"​></​div></​html+<​html><​pre class="​compact" ​style="​margin-top:​-1.2em">​ 
-<code> +<i>​… ​poprzednie ​nagłówki …</i> 
-… inne nagłówki … +Content-Type:​ multipart/​alternate;​ boundary="<​b>​oddzielacz</​b>"​
-Content-Type:​ multipart/​alternate;​ boundary=oddzielacz+
  
---oddzielacz+<span style="​color:#​007">​--oddzielacz</​span>​
 Content-Type:​ text/plain Content-Type:​ text/plain
  
 Przyjdzie o **jedenastej** wieczorem. Przyjdzie o **jedenastej** wieczorem.
---oddzielacz+<span style="​color:#​007">​--oddzielacz</​span>​
 Content-Type:​ text/html Content-Type:​ text/html
  
-<html><body><p>Przyjdzie o <b>jedenastej</bwieczorem.</p></body></html> +&lt;html&​gt;&​lt;​body&​gt;&​lt;​p&gt;Przyjdzie o &lt;b&gt;jedenastej&lt;/b&​gt; ​wieczorem.&lt;/p&​gt;&​lt;​/body&​gt;&​lt;​/html&gt; 
---oddzielacz +<span style="​color:#​007"​>​--oddzielacz--</​span>​ 
-</code>+</pre></​html>
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 620: Linia 715:
  
 Typ ''​multipart/​**mixed**''​ służy do wysłania kilku niezależnych części i jest Typ ''​multipart/​**mixed**''​ służy do wysłania kilku niezależnych części i jest
-używany do wysyłania z załącznikami.+używany do wysyłania ​maili z załącznikami.
  
 Przykład: Przykład:
-<​html><​div style="​margin-top:​-1.2em"><​/div></html> +<​html><​pre class="​compact" ​style="​margin-top:​-1.2em">​ 
-<code>+<i>… poprzednie nagłówki …</i>
 … inne nagłówki … … inne nagłówki …
-Content-Type:​ multipart/​mixed;​ boundary=fikusny_separator+Content-Type:​ multipart/​mixed;​ boundary="<​b>​fikusny_separator</​b>"​
  
---fikusny_separator+<span style="​color:#​007">​--fikusny_separator</​span>​
 Content-Type:​ text/plain Content-Type:​ text/plain
  
 Zobacz ten obrazek! Zobacz ten obrazek!
---fikusny_separator+<span style="​color:#​007">​--fikusny_separator</​span>​
 Content-Type:​ image/png Content-Type:​ image/png
 Content-Transfer-Encoding:​ base64 Content-Transfer-Encoding:​ base64
Linia 640: Linia 735:
 ETvHpgjyISFAGN5YCNgjrP7GURBzioYgzEHcQ9mIFMRLHykg2AtU+0bVxCNq8am+oe6OJ8yf5QDW ETvHpgjyISFAGN5YCNgjrP7GURBzioYgzEHcQ9mIFMRLHykg2AtU+0bVxCNq8am+oe6OJ8yf5QDW
 ShMmZmKfpQAAAABJRU5ErkJggg== ShMmZmKfpQAAAABJRU5ErkJggg==
---fikusny_separator +<span style="​color:#​007">​--fikusny_separator--</​span>​ 
-</code>+</pre></​html>
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 650: Linia 745:
  
 Typu MIME moża w sobie dowolnie zagnieżdżać,​ więc można również: Typu MIME moża w sobie dowolnie zagnieżdżać,​ więc można również:
-<code+<html><​pre class="​compact"​ style="​margin-top:​-1.2em"​
-… inne nagłówki … +<i>… poprzednie ​nagłówki …</i> 
-Content-Type:​ multipart/​mixed;​ boundary=a+Content-Type:​ multipart/​mixed;​ boundary="<​b>​a</​b>"​
  
---a +<span style="​color:#​007">​--a</​span>​ 
-Content-Type:​ multipart/​alternative;​ boundary=b+Content-Type:​ multipart/​alternative;​ boundary="<​b>​b</​b>"
  
---b+<span style="​color:#​070">​--b</​span>​
 Content-Type:​ text/plain Content-Type:​ text/plain
  
 Zobacz ten obrazek! Zobacz ten obrazek!
 [IMG] [IMG]
---b +<span style="​color:#​070">​--b</​span>​ 
-Content-Type:​ multipart/​related;​ boundary=c+Content-Type:​ multipart/​related;​ boundary="<​b>​c</​b>"​
  
---c+<span style="​color:#​700">​--c</​span>​
 Content-Type:​ text/html Content-Type:​ text/html
  
-<html><body><p>Zobacz ten obrazek!</p> +&lt;html&​gt;&​lt;​body&​gt;&​lt;​p&gt;Zobacz ten obrazek!&lt;/p&gt; 
-<p><img src="​cid:​my-mail-img""​></p></body></html> +&lt;p&​gt;&​lt;​img src="​cid:​my-mail-img""​&​gt;&​lt;​/p&​gt;&​lt;​/body&​gt;&​lt;​/html&gt; 
---c+<span style="​color:#​700"​>--c</​span>​
 Content-Type:​ image/png Content-Type:​ image/png
 Content-Transfer-Encoding:​ base64 Content-Transfer-Encoding:​ base64
-Content-ID: ​<my-mail-img>+Content-ID: ​&lt;my-mail-img&gt;
  
 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAATElEQVQY04WOOQ7AQAwCZ1b+/​5dJ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAATElEQVQY04WOOQ7AQAwCZ1b+/​5dJ
 ETvHpgjyISFAGN5YCNgjrP7GURBzioYgzEHcQ9mIFMRLHykg2AtU+0bVxCNq8am+oe6OJ8yf5QDW ETvHpgjyISFAGN5YCNgjrP7GURBzioYgzEHcQ9mIFMRLHykg2AtU+0bVxCNq8am+oe6OJ8yf5QDW
 ShMmZmKfpQAAAABJRU5ErkJggg== ShMmZmKfpQAAAABJRU5ErkJggg==
---c +<span style="​color:#​700">​--c--</​span>​ 
---b +<span style="​color:#​070">​--b--</​span>​ 
---a+<span style="​color:#​007">​--a</​span>​
 Content-Type:​ text/plain Content-Type:​ text/plain
 Content-Disposition:​ attachment; filename="​licencja.txt"​ Content-Disposition:​ attachment; filename="​licencja.txt"​
  
 kopyrajt 2025 kopyrajt 2025
---a +<span style="​color:#​007">​--a--</​span>​ 
-</code>+</pre></​html>
  
 ==== Kodowanie treści ==== ==== Kodowanie treści ====
Linia 695: Linia 790:
  
 Kodowanie dla danej części wiadomości można ustawić w nagłówku Kodowanie dla danej części wiadomości można ustawić w nagłówku
-//​Content-Transfer-Encoding//​. Domyślna wartość to ''​7bit'',​ nie pozwalająca w+//**Content-Transfer-Encoding**//. Domyślna wartość to ''​7bit'',​ nie pozwalająca w
 ogóle na użycie znaków spoza US-ASCII. ogóle na użycie znaków spoza US-ASCII.
  
-Inne dozwolone kodowana to "​normalne"​ ''​8bit''​ i ''​binary''​ (pierwsze ogranicza+Inne dozwolone kodowana to "​normalne"​ ''​**8bit**''​ i ''​binary''​ (pierwsze ogranicza
 długość linii do 998 znaków, drugie nie nakłada ograniczenia na długość linii) długość linii do 998 znaków, drugie nie nakłada ograniczenia na długość linii)
 oraz ''​quoted-printable''​ i ''​base64''​. oraz ''​quoted-printable''​ i ''​base64''​.
  
-''​Content-Transfer-Encoding:​ quoted-printable''​ ([[https://​datatracker.ietf.org/​doc/​html/​rfc2045#​section-6.7|RFC]])+''​Content-Transfer-Encoding: ​**quoted-printable**''​ ([[https://​datatracker.ietf.org/​doc/​html/​rfc2045#​section-6.7|RFC]])
 bez zmian przesyła drukowalne znaki ASCII poza znakiem równości, bez zmian przesyła drukowalne znaki ASCII poza znakiem równości,
 natomiast całą resztę (w tym np. spacje czy znaki nowej linii) koduje jako natomiast całą resztę (w tym np. spacje czy znaki nowej linii) koduje jako
 ''​=//​XX//'',​ gdzie //XX// to szesnastkowa wartość kodowanego znaku. ''​=//​XX//'',​ gdzie //XX// to szesnastkowa wartość kodowanego znaku.
-Powstały tekst zawija się przed 77 znakiem , wstawiając na koniec linii znak ''​=''​.+Powstały tekst zawija się przed 78 znakiem, wstawiając na koniec linii znak ''​=''​.
 \\ \\
 Np. ''​Einstein napisał: e=mc²''​ z nową linią na końcu stanie się tekstem Np. ''​Einstein napisał: e=mc²''​ z nową linią na końcu stanie się tekstem
 ''​Einstein=20napisa=C5=82:​=20e=3Dmc=C2=B2=0D=0A''​. ''​Einstein=20napisa=C5=82:​=20e=3Dmc=C2=B2=0D=0A''​.
  
-''​Content-Transfer-Encoding: ​quoted-printable''​ używa zwykłego ​''​base64'' ​do zakodowania treści.+''​Content-Transfer-Encoding: ​**base64**''​ używa zwykłego 
 +[[https://​en.wikipedia.org/​wiki/​Base64|base64]] do zakodowania treści.
 \\ \\
 Np. ''​Einstein napisał: e=mc²''​ z nową linią na końcu stanie się tekstem Np. ''​Einstein napisał: e=mc²''​ z nową linią na końcu stanie się tekstem
Linia 718: Linia 814:
 Kodowanie ''​base64''​ jest powszechnie używane do przesyłania nietekstowych Kodowanie ''​base64''​ jest powszechnie używane do przesyłania nietekstowych
 załączników i jest do tego celu niewydajne – base64 koduje 3 bit treści na załączników i jest do tego celu niewydajne – base64 koduje 3 bit treści na
-4 bitach danych, więc objętość wiadomości rośnie o ⅓.+4 bitach danych ​wymaga łamania wierszy wynikowego tekstu, więc po objętość 
 +wiadomości rośnie o ponad ⅓.
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
 Wyszukaj w swojej skrzynce przynajmniej dwa maile z polskimi znakami w treści Wyszukaj w swojej skrzynce przynajmniej dwa maile z polskimi znakami w treści
 które używają różnych ''​Content-Transfer-Encoding''​. które używają różnych ''​Content-Transfer-Encoding''​.
 +
sk2/mail.1736824068.txt.gz · ostatnio zmienione: 2025/01/14 04:07 (edycja zewnętrzna)