User Tools

Site Tools


sk2:mail

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sk2:mail [2025/01/14 03:07] – utworzono jkonczaksk2:mail [2026/01/14 14:36] (current) – jkonczak
Line 1: Line 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:
Line 18: Line 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)
Line 24: Line 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>
Line 39: Line 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 z 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>).
  
Line 51: Line 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
Line 64: Line 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 ===
  
Line 99: Line 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.
Line 128: Line 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 │
Line 134: Line 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 =====
Line 143: Line 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''
Line 167: Line 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>
Line 178: Line 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>
Line 204: Line 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>
Line 211: Line 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>
  
Line 221: Line 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>
  
Line 235: Line 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''
Line 266: Line 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>). \\
Line 287: Line 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)
Line 298: Line 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>
Line 312: Line 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).
  
Line 329: Line 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>
Line 354: Line 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:
Line 360: Line 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, a ''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
Line 376: Line 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ę
Line 386: Line 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
Line 398: Line 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>
Line 452: Line 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>
Line 473: Line 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.#~~
Line 490: Line 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]].
 \\ \\
Line 513: Line 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.#~~
Line 526: Line 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
Line 579: Line 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'' i ''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//
Line 597: Line 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</b> wieczorem.</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.#~~
Line 620: Line 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
Line 640: Line 735:
 ETvHpgjyISFAGN5YCNgjrP7GURBzioYgzEHcQ9mIFMRLHykg2AtU+0bVxCNq8am+oe6OJ8yf5QDW ETvHpgjyISFAGN5YCNgjrP7GURBzioYgzEHcQ9mIFMRLHykg2AtU+0bVxCNq8am+oe6OJ8yf5QDW
 ShMmZmKfpQAAAABJRU5ErkJggg== ShMmZmKfpQAAAABJRU5ErkJggg==
---fikusny_separator +<span style="color:#007">--fikusny_separator--</span> 
-</code>+</pre></html>
  
 ~~Zadanie.#~~ ~~Zadanie.#~~
Line 650: Line 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 ====
Line 695: Line 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
Line 718: Line 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 · Last modified: (external edit)