RE:NODE

Hosting aplikací11 min čtení

IMAP vs POP3 vs JMAP: srovnání protokolů pro přístup k poště

Čím se liší IMAP, POP3 a JMAP: model synchronizace, push, porty, podpora klientů a spotřeba baterie, a které z nich zapnout na vlastním poštovním serveru.

2 čtenáři

Používej IMAP. Nechává poštu na serveru a drží ji synchronizovanou na všech zařízeních, podporuje ho každý poštovní klient a na portu 993 je šifrovaný od prvního bajtu. JMAP je moderní náhrada - JSON přes HTTPS, efektivní synchronizace, pořádný push - a tam, kde ho klient umí, je výborný, jenže většina běžných klientů ho pořád nepodporuje. POP3 stahuje poštu na jedno zařízení a smysl má zapnout ho jen pro konkrétní starší zařízení, které nic jiného neumí. Na vlastním serveru to znamená: zapni IMAPS na 993 a submission port pro odesílání, přidej JMAP přes HTTPS, pokud máš klienty, které ho používají, a POP3 i porty bez šifrování nech vypnuté.

Žádný z těchto protokolů poštu neodesílá. Odesílání je vždy SMTP submission na 587 nebo 465 - kromě JMAP, který odesílání zahrnuje do stejného API. Právě tohle lidem při nastavování klientů dělá potíže, takže se k tomu níž ještě vrátíme.

Tři protokoly ve zkratce#

POP3IMAPJMAP
StandardRFC 1939 (1996)RFC 9051 IMAP4rev2 (2021); RFC 3501 rev1RFC 8620 core, RFC 8621 mail (2019)
PřenosText přes TCPText přes TCPJSON přes HTTPS
Porty110 STARTTLS, 995 TLS143 STARTTLS, 993 TLS443
Kde pošta ležíNa zařízeníNa serveruNa serveru
SložkyJen doručená poštaAnoAno (mailboxes)
Více zařízeníŠpatněAnoAno
PushNeIDLE, jedna složka na připojeníPush pro všechny změny
OdesíláníNe - použij SMTPNe - použij SMTPVestavěné
Podpora klientůUniverzálníUniverzálníOmezená

POP3: stáhnout a (obvykle) smazat#

POP3 - Post Office Protocol version 3 - bere server jako odkladiště. Klient se připojí, vypíše čekající zprávy, stáhne je a ve výchozím nastavení je ze serveru smaže. Pošta pak žije na tom jednom zařízení.

a POP3 session, abbreviated
+OK POP3 readyUSER anna@example.com+OKPASS ********+OK 3 messagesRETR 1+OK message follows...DELE 1+OKQUIT

Tenhle model dával smysl, když lidé měli jeden počítač a server málo místa na disku. Dnes selhává ve všem podstatném: přečteš zprávu v telefonu a v notebooku už není; složky neexistují, takže třídění na jednom zařízení nic neznamená jinde; a když zařízení zemře, pošta zemře s ním, pokud ji někdo nezálohoval.

Klienti nabízejí „nechat kopii na serveru“, což trochu pomáhá. Sledují, které zprávy už stáhli, pomocí UIDL (unikátní ID), takže si dvě zařízení mohou stáhnout všechno. Stav přečtení, mazání a složky se ale pořád nesynchronizují a schránky na serveru rostou donekonečna, pokud jeden z klientů není nastavený na mazání po určitém počtu dní.

Kdy má POP3 pořád smysl: starší zařízení nebo aplikace, která umí jen stahovat, například ticketovací systém importující poštu ze schránky, nebo uživatel, který opravdu chce mít veškerou poštu na jednom stroji a žádnou na serveru. To je tak všechno.

IMAP: pravda žije na serveru#

IMAP - Internet Message Access Protocol - drží veškerou poštu a složky na serveru a klient zobrazuje jejich pohled. Přečteš zprávu v telefonu a v notebooku je označená jako přečtená. Zařadíš ji do složky a je zařazená všude. Ztratíš telefon a nepřijdeš o nic.

Co v praxi dělá IMAP použitelným:

  • Složky a příznaky na serveru. Přečteno, zodpovězeno, označeno hvězdičkou, smazáno i vlastní klíčová slova - vše uložené u každé zprávy.
  • Částečné stahování. Klient si může nejdřív stáhnout hlavičky a strukturu a tělo nebo jednu přílohu až při otevření. Díky tomu jsou velké schránky použitelné v telefonu.
  • Vyhledávání na straně serveru. SEARCH běží na serveru, takže klient najde zprávu v 10GB schránce, aniž by ji stahoval.
  • IDLE (RFC 2177). Klient serveru řekne „dej mi vědět o změnách“ a nechá spojení otevřené; nová pošta se objeví během pár sekund. Háček je v tom, že IDLE sleduje jednu složku na připojení, takže klient, který chce okamžité aktualizace u pěti složek, potřebuje pět připojení.
  • Efektivní resynchronizace pomocí rozšíření CONDSTORE a QRESYNC (RFC 7162). Klient, který se znovu připojí, se může zeptat „co se změnilo od modifikační sekvence N“, místo aby znovu vypisoval každou zprávu. Bez nich znamená otevření velké složky po dni offline znovu zkontrolovat příznaky každé zprávy.

Slabinou IMAP je, že jde o upovídaný stavový textový protokol navržený v osmdesátých letech a od té doby rozšiřovaný. Každý klient musí držet dlouhodobé spojení pro každou sledovanou složku, zpracovávat složitou gramatiku a zvládat dlouhý seznam volitelných rozšíření, která servery podporují nerovnoměrně. V telefonu udržování otevřených spojení vybíjí baterii, a proto mobilní klienti často dotazují server v intervalech místo použití IDLE. Aplikace Mail od Apple na iPhonu například nabízí push u některých typů účtů, ale IMAP účty stahuje podle plánu.

Používej port 993 (implicitní TLS). Port 143 se STARTTLS je přijatelný jen tehdy, pokud server odmítne přihlášení dřív, než se vyjedná TLS; RFC 8314 doporučuje implicitní TLS právě proto, že neexistuje nešifrovaná fáze, kterou by šlo napadnout.

JMAP: pošta jako moderní API#

JMAP - JSON Meta Application Protocol - vznikl ve Fastmailu a IETF ho standardizovala v roce 2019, aby moderním návrhem vyřešil problémy IMAP. Jsou to JSON požadavky přes HTTPS:

a JMAP request: list the 10 newest messages in the inbox
{  "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],  "methodCalls": [    ["Email/query", {      "accountId": "a1",      "filter": { "inMailbox": "inbox-id" },      "sort": [{ "property": "receivedAt", "isAscending": false }],      "limit": 10    }, "q"],    ["Email/get", {      "accountId": "a1",      "#ids": { "resultOf": "q", "name": "Email/query", "path": "/ids" },      "properties": ["subject", "from", "receivedAt", "preview"]    }, "g"]  ]}

Dvě volání v jednom požadavku: to druhé používá výsledek prvního přes zpětný odkaz (#ids), takže klient dostane seznam i podrobnosti na jeden oběh. Právě toto dávkování je velkou částí důvodu, proč je JMAP rychlý na pomalém mobilním připojení.

Další prvky návrhu:

  • Stavové řetězce pro synchronizaci. Každý typ objektu má svůj stav. Klient se zeptá „co se změnilo od stavu X“ a dostane přesně ID vytvořených, změněných a zrušených objektů. Žádné opakované výpisy, žádná připojení po složkách.
  • Push pro všechno. Jedno spojení - EventSource přes HTTP nebo WebSocket (RFC 8887) - informuje klienta o změnách ve všech schránkách. Šetří baterii a je okamžitý.
  • Vestavěné odesílání. EmailSubmission odesílá poštu přes stejné API a stejnou autentizaci. Klient JMAP nepotřebuje samostatné nastavení SMTP.
  • Zjišťování služby. Klienti najdou API na https://<host>/.well-known/jmap, které vrací objekt session s endpointy a schopnostmi.
  • Běžná webová infrastruktura. Je to HTTPS, takže projde firewally, proxy a load balancery, které už webový provoz zvládají, a snadno se používá z prohlížeče i z libovolného programovacího jazyka.

Omezením jsou klienti. Většina běžných desktopových a mobilních poštovních aplikací - Outlook, Apple Mail, aplikace Gmail - JMAP neumí. Používají ho vlastní aplikace Fastmailu, některé novější a open-source klienty, webové klienty a knihovny pro tvorbu vlastních nástrojů. Na straně serveru ho implementují Stalwart, Cyrus IMAP a Apache James. Pokud píšeš software, který poštu čte nebo třídí, je JMAP mnohem příjemnější na programování než IMAP; pokud nastavuješ telefony v kanceláři, budou pořád používat IMAP.

Co který protokol znamená pro uživatele#

čtení, plus SMTP 587/465čtení, plus SMTP 587/465čtení a odesíláníjen stahováníTelefonyIMAP 993Desktopoví klientiIMAP 993Webový klient, skriptyJMAP přes 443Starší importérPOP3 995 při potřeběTvůj poštovní serverjedno úložiště schránek
Který protokol má které zařízení používat

Všechna tato zařízení pracují se stejnou schránkou současně. Server jako Stalwart ukládá poštu jednou a poskytuje ji přes každý protokol, který zapneš, takže uživatel může číst v telefonu přes IMAP, zatímco skript třídí zprávy přes JMAP, a oba vidí stejné složky.

Nastavení klienta pro běžný případ:

NastaveníHodnota
Server pro příchozí poštumail.example.com, IMAP
Port a zabezpečení příchozí pošty993, SSL/TLS
Server pro odchozí poštumail.example.com, SMTP
Port a zabezpečení odchozí pošty465 SSL/TLS, nebo 587 STARTTLS
Uživatelské jménoPřihlašovací jméno účtu (často celá adresa)
OvěřováníBěžné heslo, nebo heslo aplikace

Nastavení e-mailového klienta pro IMAP a SMTP provede Thunderbirdem, Outlookem, iOS a Androidem, včetně autoconfigu, aby uživatelé nemuseli nic z toho vypisovat ručně.

Co zapnout na vlastním serveru#

Každý otevřený port je něco, co je vystavené internetu a botům hádajícím hesla. Zapni to, co používáš.

  • IMAPS na `993`: ano. Potřebuje ho každý klient.
  • Submission na `465` nebo `587`: ano, jeden z nich, pro odesílání. Oba, pokud máš klienty, kteří trvají na jednom z nich.
  • JMAP na `443`: ano, pokud používáš klienta JMAP nebo chceš nad schránkou stavět nástroje; na Stalwartu sdílí HTTPS listener s webovou administrací.
  • IMAP na `143`: jen pokud klient neumí implicitní TLS, a jen s vynuceným STARTTLS před přihlášením.
  • POP3 na `995`: jen pro konkrétní zařízení, které ho potřebuje. Nikdy 110 bez TLS.
  • ManageSieve na `4190`: jen pokud uživatelé upravují pravidla filtrů z klienta, který ho používá.

V plánu RE:NODE Mail Server máš k dispozici pět portů, takže tahle volba je konkrétní: IMAPS, submission port a HTTPS pokryjí téměř všechny a zbude místo na jeden dva doplňky. Port 25 pro příjem pošty z internetu je samostatná věc, kterou na požádání nastaví podpora. Nastavení poštovního serveru Stalwart pokrývá stranu listenerů a port 25 a blokace odchozí pošty vysvětluje, proč je 25 jiný.

Přihlašování, hesla a bezpečnost napříč protokoly#

Všechny tři protokoly přenášejí uživatelské jméno a heslo a všechny jsou terčem. Boti hádající hesla bez přestání procházejí internetové porty IMAP, POP3 a submission a účet, který jim podlehne, se během hodin používá k rozesílání spamu. Na výběru protokolu záleží méně než na tom, jak jsou přihlášení chráněná.

  • Šifruj každé spojení. Implicitní TLS na 993, 995 a 465, nebo STARTTLS vynucené před autentizací na ostatních. Server, který na 143 nebo 110 přijme heslo v čitelné podobě, ho předá každému na trase.
  • Používej hesla aplikací pro každé zařízení, kde to server podporuje. Telefon, notebook i tablet dostanou každý své heslo, takže ztracené zařízení znamená zrušit jedno přihlašovací údaje, ne měnit hlavní heslo uživatele všude.
  • Vypni, co nepoužíváš. Vypnutý listener POP3 nejde bruteforcovat. To je nejsilnější argument pro to nechávat POP3 ve výchozím stavu vypnuté.
  • Sleduj neúspěšná přihlášení v logách serveru. Stálý proud z mnoha adres proti jednomu účtu je útok hádáním; zvaž, zda je heslo toho účtu dost silné, abys to mohl ignorovat.
  • OAuth je způsob, který velcí poskytovatelé dnes u klientů preferují, a některé vlastní servery ho pro IMAP a SMTP také podporují, přes mechanismy XOAUTH2 a OAUTHBEARER. Podpora OAuth u klientů vůči vlastnímu serveru je nevyrovnaná, takže běžným případem zůstávají obyčejná hesla přes TLS.

JMAP má v tomhle drobnou výhodu: běží přes HTTPS se stejnými možnostmi autentizace jako jakékoli webové API, takže se rovnou uplatní nástroje pro tokeny a omezování rychlosti, které už chrání webové služby.

Přesun uživatelů z POP3 na IMAP#

Pokud zdědíš uživatele na POP3 - běžné po letech na starém hostingu - stojí přesun na IMAP za námahu, ale musí se dělat opatrně, protože jejich pošta může existovat jen na jejich počítačích.

  1. Zjisti, kde pošta každého uživatele leží. Pokud jeho klient po stažení mazal ze serveru, jedinou kopií je ta lokální. Pokud poštu na serveru nechával, kopie na serveru může být úplná, částečná nebo několik let stará.
  2. Přidej účet IMAP vedle toho POP3 ve stejném klientovi, ukazující na stejnou schránku. POP3 účet zatím neodstraňuj.
  3. Přetáhni lokální složky do účtu IMAP. Klient je nahraje na server, což u velké schránky může trvat hodiny. Poté zkontroluj počty na straně serveru.
  4. Nastav ostatní zařízení jen s IMAP.
  5. Odstraň účet POP3, jakmile je nahrání potvrzené, a starý datový soubor si ještě nějakou dobu nech jako lokální zálohu.

Při přesunu celého serveru mezi poskytovateli je rychlejší a spolehlivější kopírovat na straně serveru přes IMAP nástrojem jako imapsync - migrace e-mailu na vlastní server to popisuje.

Časté problémy u jednotlivých protokolů#

  • POP3 „sežral“ poštu. Klient nastavený na mazání po stažení vyprázdnil server; ostatní zařízení nevidí nic. Zapni „nechat na serveru“, nebo ještě lépe přejdi na IMAP.
  • Chybějící složky IMAP na jednom zařízení. Složky existují, ale v tom klientovi nejsou odebírané (subscribed). Hledej volbu „subscribe“ nebo „správa složek“.
  • Odeslaná pošta se objevuje dvakrát, nebo vůbec. U IMAP klient po odeslání přes SMTP nahraje kopii do složky Odeslané. Pokud poštu ukládá i server, vznikají duplikáty; pokud nastavení složky Odeslané v klientovi ukazuje na lokální složku, server ji nikdy neuvidí. Nastav v klientovi složku odeslaných na Sent na serveru.
  • Nová pošta v telefonu chodí pomalu. Klient server dotazuje v intervalech místo použití IDLE, často kvůli šetření baterie. Zkontroluj interval načítání, nebo použij klienta s push.
  • „Nelze se připojit“ na 993, ale 143 funguje. Firewall, nebo port není zpřístupněný. Zkontroluj mapování portů dřív než certifikát.
  • Varování o certifikátu. Klient se připojuje k názvu, který na certifikátu serveru není, například k samotné IP adrese. Použij název hostitele.

FAQ#

Je POP3 soukromější, protože se pošta ze serveru odstraňuje?

Jen pokud klient po stažení maže a nic jiného kopii nedrží - a pak tvoje pošta existuje na jednom zařízení, které pravděpodobně není zálohované. Pro soukromí šifruj spojení a zabezpeč server; na mazání nespoléhej.

Můžu na jedné schránce používat IMAP i POP3?

Ano, pokud to server dovolí, ale klient POP3, který po stažení maže, odstraní poštu i z pohledu IMAP. Pokud je nutné je míchat, nastav klienta POP3 tak, aby poštu nechával na serveru.

Nahrazuje JMAP SMTP?

Pro klienty ano - klienti JMAP odesílají přes API. Mezi servery ne. Pošta stále putuje z tvého serveru k jiným organizacím přes SMTP na portu 25.

Proč můj telefon JMAP nepodporuje?

Většina poštovních aplikací pro telefony vznikla kolem IMAP a Exchange a JMAP nepřidala. V telefonech používej IMAP; výhody JMAP vynikají nejvíc ve webových klientech a v softwaru, který si napíšeš sám.

Který port mám použít pro IMAP?

993 s SSL/TLS. Port 143 používej jen s vynuceným STARTTLS a jen pokud klient neumí implicitní TLS.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000