User Tools

Site Tools


sk2:mail

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sk2:mail [2025/01/14 14:08] – 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 24: Line 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>
Line 105: Line 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.
Line 134: Line 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 │
Line 149: 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 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
Line 173: 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 184: 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 210: 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 228: 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 242: 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: \\
Line 294: 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 305: 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 319: 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 336: 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 361: 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 369: Line 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''
Line 386: Line 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
Line 394: Line 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 maili, szukać i 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 (From, Subject i Date) i flagi (przeczytane, 
-z (również webowych) klientó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''**
Line 411: 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 465: 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 486: 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 503: 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 526: 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 539: 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 592: 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 610: 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 633: 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 653: 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 663: 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 708: 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 731: 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.#~~
sk2/mail.1736863685.txt.gz · Last modified: (external edit)