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

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk2:mail [2025/01/14 15:08]
jkonczak
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 24: Linia 30:
  
 <​html>​ <​html>​
-<pre style="​margin-top:​-1.2em; line-height:​ 1em; padding: .25em .5em">+<​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>​
Linia 105: Linia 111:
 === Wysłanie === === Wysłanie ===
  
-<​html><​pre style="​line-height:​1em;​font-family:​DejaVu Sans Mono;​margin-bottom:​0;​margin-top:​-1.2em">​ +<​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 134: Linia 140:
 === Odbieranie === === Odbieranie ===
  
-<​html><​pre style="​line-height:​1em;​font-family:​DejaVu Sans Mono;​margin-bottom:​0;​margin-top:​-1.2em">​+<​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 149: 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 przedstawia się komendą ''​EHLO //​nazwa_domenowa//''​ (<​small>​lub starszym ''​HELO //​nazwa_domenowa//''</​small>​) i czeka 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 \\ <​small>​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''</​small>​+      * 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 wysyła informację o nadawcy maila komendą ''​MAIL FROM://​nadawca//''​ i czeka na akceptację serwera +  - klient wysyła informację o nadawcy maila komendą ''​**MAIL FROM**:<//nadawca//>''​ i czeka na akceptację serwera 
-  - klient wysyła informację o jednym odbiorcy maila komendą ''​RCPT TO://​odbiorca//''​ i czeka 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, to serwer usuwa tą kropkę; dlatego żeby wysłać maila z linią złożoną z kropki, można 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
Linia 173: 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 184: 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 210: 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 228: 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 242: 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: \\
Linia 294: 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 305: 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 319: 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 336: 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 361: 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 369: Linia 376:
     * dodać nową wiadomość do wskazanego katalogu, np. umieścić nową wiadomość w katalogu //\Drafts//     * dodać nową wiadomość do wskazanego katalogu, np. umieścić nową wiadomość w katalogu //\Drafts//
   - klient wybiera katalog który chce otworzyć:   - klient wybiera katalog który chce otworzyć:
-    * w trybie zapisu i odczytu komendą ''​SELECT //​nazwa//'',​ lub+    * w trybie zapisu i odczytu komendą ''​**SELECT** //​nazwa//'',​ lub
     * w trybie tylko do odczytu komendą ''​EXAMINE //​nazwa//''​     * w trybie tylko do odczytu komendą ''​EXAMINE //​nazwa//''​
   - po wybraniu katalogu, klient może:   - po wybraniu katalogu, klient może:
-    * 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>​ +    * 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>​ 
-    * 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''​), \\ ''​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 +    * 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''​     * 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>​+    * 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''​
Linia 386: Linia 393:
 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
Linia 394: Linia 426:
 //num//. //num//.
     ​     ​
-Jak widać, protokół IMAP pozwala zarówno ściągać całe maile (czyli zastąpić +Protokół IMAP pozwala zarówno ściągać całe maile (czyli zastąpić protokół POP3), 
-protokół POP3), jaki i pozwala ​łatwo pobierać listy mailiszukać ​czytać +jaki i pozwala ​klientom pocztowym (również w formie "​aplikacji"​ webowych) między 
-wybrane części ​wybranych maili bezpośrednio z serwera, co pozwala korzystać +innymi pobrać wybrane nagłówki (FromSubject ​Date) i flagi (przeczytane,​ 
-(również webowychklientów pocztowych.+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''​**
Linia 411: 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 465: 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 486: 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 503: 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 526: 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 539: 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 592: 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 610: 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 633: 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 653: 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 663: 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 708: 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 731: 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.#​~~
sk2/mail.1736863685.txt.gz · ostatnio zmienione: 2025/01/14 15:08 przez jkonczak