Úvod

Medzi najpopulárnejšie spôsoby komunikácie, ktoré nám priniesol Internet je e-mail. Tento dokument popisuje princípy toho ako e-mail funguje. E-mail (rovnako ako mnoho iných funkcií počítača) môžete používať aj bez toho aby ste vedeli ako to vnútri funguje. Al vedieť viacej je lepšie, nie?

Posielanie pošty

Keď posielate e-mailovú správu môžete vynechať telo správy. Môžete vynechať aj vyplnenie kolonky Predmet (Subject:), ale ak chcete aby správa niekam odišla musíte vyplniť položku Adresát (To:). Cesta e-mailu začína práve tu. Adresa môže vyzerať rôzne. Môže pozostávať len z mena (napr. rastos), môže špecifikovať meno užívateľa a meno počítača (napr. rastos@server), meno počítača môže byť aj úplné (napr. rastos@server.example.org). Najbežnejšou formou však je meno a doména (napr. rastos@example.org). Túto adresu teda zadáme do programu na písanie e-mailov. Aby tento program vedel kam správu poslať má dve možnosti:

  1. Odovzdať telo správy spolu so všetkými potrebnými údajmi inému programu. Napríklad mnohé unix-ové programy na písanie e-mailu samotné odoslanie správy prenechajú interaktívnemu módu programu sendmail. Ten potom použije postup popísaný v nasledujúcom bode.
  2. Protokolom SMTP odovzdať takzvanému odchodziemu serveru (angl. outgoing server). Týmto serverom je zvyčajne SMTP server poskytovateľa pripojenia na internet. Správca väčších lokálnych sietí (napr. vo firmách, alebo školských sieťach) môže zriadiť vlastný SMTP server.

SMTP server

SMTP server je server, ktorý v závislosti na druhu adresy môže urobiť jednu z nasledujúcich vecí:

Veta Pokúsi sa správu doručiť sám je krátka, ale skrýva sa za ňou mnoho. SMTP server sa spojí s DNS serverom, aby si od neho vypýtal takzvaný MX záznam pre danú doménu. MX je z anglického slova Mail eXchanger, teda stroj, ktorý je zodpovedný za vymieňanie e-mailu pre danú doménu. DNS server vracia teda IP adresu tohto stroja. DNS server môže mať takýchto záznamov viacero - ukazujúcich na rôzne IP adresy. V takom prípade sa jednotlivé záznamy líšia takzvanou prioritou. Je to celé kladné číslo, ktoré hovorí o tom, ktorý zo záznamov má vyššiu prednosť. Nižšie číslo znamená vyššiu prioritu. Ako vyzerajú tieto MX záznamy si môžeme pozrieť pomocou programu nslookup, na novších systémoch programom host či dig:

$ host -t mx rastos.org
rastos.org mail is handled by 20 mx.smtp.cz.
rastos.org mail is handled by 10 in.smtp.cz.

$ dig MX +short=yes rastos.org
20 mx.smtp.cz.
10 in.smtp.cz.

$ nslookup
> set type=mx
> rastos.org
Server:         192.168.1.102
Address:        192.168.1.102#53

Non-authoritative answer:
rastos.org     mail exchanger = 20 mx.smtp.cz.
rastos.org     mail exchanger = 10 in.smtp.cz.

Keď už máme adresu poštového servera, môžeme si vyskúšať, čo vlastne robí náš e-mailový klient, keď mu odovzdáva našu správu cez SMTP:

> telnet in.smtp.cz 25
Trying 81.95.97.116...
Connected to in.smtp.cz.
Escape character is '^]'.
220 in.smtp.cz ESMTP
ehlo yahoo.com
250-in.smtp.cz
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-PIPELINING
250-STARTTLS
250 8BITMIME
mail from: smith@yahoo.com
250 ok
rcpt to: testaccount@rastos.org
250 ok
data
354 go ahead
Subject: citat

Four fifths of all our troubles in this life would disappear
                if we would just sit down and keep still. -C. Coolidge
.
250 ok 1086177079 qp 12124
quit
221 in.smtp.cz
Connection closed by foreign host.

Ako vidíte server označil odosielateľa aj príjemcu správy za ok. Odosielateľ nie je ok ak jeho doména má existujúci MX záznam. Príjemca je ok, ak daný server je skutočne mail exchanger pre doménu príjemcu. SMTP server môže tiež zo sieťového spojenia zistiť z akej IP adresy mu správa prichádza a porovnať to s tým, čo tvrdí odosielateľ.

Server, ktorý nerobí tieto kontroly sa označuje termínom open relay. Takýto stroj je pokladom pre odosielateľov spam-u, ktorí často falšujú adresu odosielateľa. Mnohé (no žiaľ nie všetky), takéto servery sú zaznamenané v zozname, ako je napríklad ORDB (Open Relay Database). Keďže e-mail môže prechádzať cez viacero SMTP serverov, môžu v rámci proti-spamových opatrení jednotlivé servery tiež kontrolovať či SMTP server, od ktorého preberajú správu, nie je zaznamenaný v zozname ORDB.

Prijímanie pošty

Local

V čase, keď si e-mail ešte len razil cestu na výslnie, sa najčastejšie pošta preberala z lokálnej e-mailovej schránky. Je to vlastne súbor do ktorého e-mailový server ukladá prichádzajúce správy jednu za druhou. Tento súbor sa spravidla nachádza v adresári /var/spool/mail (na niektorých systémoch /usr/spool/mail alebo /usr/lib/mail). Program na čítanie e-mailu, označovaný ako mailer (alebo aj Mail User Agent - MUA) číta tento súbor a umožňuje jednotlivé správy zobraziť a spracovať. To samozrejme môže fungovať vtedy, keď mailer beží na tom istom počítači, na ktorom sa nachádza e-mailová schránka. Čo už dnes nie je tak časté.

POP

Najčastejší spôsob prístupu k e-mailovej schránke je asi sieťovým protokolom POP (Post Office Protocol). Je to pomerne jednoduchý protokol, ktorým si mailer preberá správy z poštového servera. Znamená to teda, že správa od odosielateľa dorazí na server, a tam zostáva až do okamihu, kedy si ju odtiaľ nevyzdvihnete. Pri prevzatí správy z POP servera, sa zvyčajne správa na serveri zmaže a zostáva teda len na klientovi. Komunikáciu POP protokolom možno jednoducho nasimulovať napríklad takto:

> telnet pop3.hosting.cz 110
Trying 81.95.97.117...
Connected to pop3.hosting.cz.
Escape character is '^]'.
+OK <29567.1086177339@pop3.smtp.cz>
user testaccount@rastos.org
+OK
pass m0jehe5sl0
+OK
list
+OK
1 656
.
retr 1
+OK
Return-Path: <smith@yahoo.com>
Delivered-To: testaccount@rastos.org
Received: (qmail 12323 invoked from network); 2 Jun 2004 11:54:37 -0000
Received: from unknown (HELO in.smtp.cz) (81.95.97.116)
  by master.smtp.cz with DES-CBC3-SHA encrypted SMTP; 2 Jun 2004 11:54:37 -0000
Received: (qmail 15491 invoked from network); 2 Jun 2004 11:51:19 -0000
Received: from unknown (HELO yahoo.com) (213.15.194.19)
  by in.smtp.cz with SMTP; 2 Jun 2004 11:51:03 -0000
Subject: citat
Message-ID: <20040602115437.12323.qmail@master.smtp.cz>

Four fifths of all our troubles in this life would disappear
                if we would just sit down and keep still. -C. Coolidge

.
dele 1
+OK
quit
+OK
Connection closed by foreign host.

Príkazy posielané klientom rozšifrujete asi ľahko: user a pass sa postarajú o našu autentifikáciu. list vypíše koľko správ je v schránke a ako sú dlhé. retr požiada o výpis správy, dele správu zmaže a quit ukončí spojenie.

Protokol POP nie je šifrovaný, takže heslo je prenášané v čistom texte. Tento nedostatok môže pomôcť odstrániť zabalenie POP protokolu do šifrovacieho protokolu SSL - to ale musí prirodzene podporovať ako server tak aj klient.

IMAP

IMAP protokol sa trocha podobá protokolu POP. Tiež je to protokol, ktorý umožňuje e-mailovému klientovi pristupovať k správam na serveri. Hlavný rozdiel je v tom, že správy zostávajú na serveri. Nepresúvajú sa na lokálny disk. Znamená to teda, že e-mailový klient len sprostredkováva pohľad na schránku sídliacu na serveri. Zmenou klienta či počítača, za ktorým sedíte sa nič nedeje. Stála vidíte tie isté správy, označenie prečítaných správa sa nemení, zostáva štruktúra priečinkov a tak ďalej. Uľahčuje to tiež systém zálohovania pretože sa nemusia zálohovať schránky jednotlivých užívateľov roztrúsené po všetkých pracovných staniciach.

Komunikácia protokolom IMAP je trocha zložitejšia. Tu je stručná ukážka:

> telnet pop3.hosting.cz 143
Trying 81.95.97.117...
Connected to pop3.hosting.cz.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.  
See COPYING for distribution information.
a001 login testaccount@rastos.org m0jehe5l0
a001 OK LOGIN Ok.
a002 select inbox
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS (\Draft \Answered \Flagged \Deleted \Seen)] Limited
* 1 EXISTS
* 1 RECENT
* OK [UIDVALIDITY 1082124563] Ok
a002 OK [READ-WRITE] Ok
a003 fetch 1:1 full
* 1 FETCH (FLAGS (\Recent) INTERNALDATE "02-Jun-2004 14:00:32 +0200"
RFC822.SIZE 669 ENVELOPE (NIL "citat" NIL NIL NIL NIL NIL NIL NIL 
"<20040602120031.21486.qmail@master.smtp.cz>") BODY ("text" 
"plain" NIL NIL NIL "8bit" 134 2))
a003 OK FETCH completed.
a004 fetch 1:1 body[TEXT]
* 1 FETCH (BODY[TEXT] {134}
Four fifths of all our troubles in this life would disappear
                if we would just sit down and keep still. -C. Coolidge
)
* 1 FETCH (FLAGS (\Seen \Recent))
a004 OK FETCH completed.
a005 store 1:1 +FLAGS (\Deleted)
* 1 FETCH (FLAGS (\Seen \Deleted \Recent))
a006 OK STORE completed.
a006 expunge
* 1 EXPUNGE
* 0 EXISTS
* 0 RECENT
a006 OK EXPUNGE completed
a007 logout
* BYE Courier-IMAP server shutting down
a007 OK LOGOUT completed
Connection closed by foreign host.

Väčšina príkazov začína unikátnym identifikátorom (ja som pre jednoduchosť použil identifikátory začínajúce s a00). Príkaz select zvolí priečinok, ktorého sa budú týkať ďalšie príkazy. fetch môže vrátiť rôzne časti správy. V našom prípade to bola najprv hlavička a potom telo. Protokol IMAP ponúka tiež rozsiahlu sadu príkazov pre nastavovanie príznakov správ (videná, zmazaná, odpovedaná, atď.) a príkazov na prácu s priečinkami (vytvoriť, zmazať, premenovať, atď.).

Podobne ako pri protokole POP, komunikácia klienta so serverom nemusí byť šifrovaná.

Čo nájdeme v mailovej správe

Každá e-mailová správa sa skladá z hlavičky a tela. Oddelené sú prázdnym riadkom.

Hlavička (angl. header) obsahuje niekoľko druhov informácií. Ich význam určujú kľúčové slová na začiatku riadku nasledované dvojbodkov:

To:
e-mailová adresa príjemcu
Cc:
e-mailové adresy ľudí, ktorí dostanú kópiu správy (z anglického Carbon Copy)
Bcc:
e-mailové adresy ľudí, ktorí dostanú kópiu správy, ale normálni príjemcovia sa o tom nedozvedia (z anglického Blind Carbon Copy)
From:
e-mailová adresa
Subject:
Predmet, titulok správy.
Date:
Dátum a čas odoslania.
Received:
Jedno Received: pre každý server, cez ktorý správa prechádzala. Dá sa tu dozvedieť meno servera, doba, kedy server správu spracovával, akým protokolom správu dostal, unikátny identifikátor správy a pre koho je správa určená. Každý server zopakuje Received: riadky, ktoré už v správe sú a pridá svoj. Tento údaj teda umožňuje určiť trasu po ktorej správa putovala - až k jej zdroju. Preto sa napríklad rozosielatelia SPAM-u, či vírusy túto časť snažia falšovať. Niektoré anti-spamové riešenia sú založené na tom, že overujú platnosť týchto informácií.
Message-ID:
Unikátny identifikátor správy, umožňujúci napríklad radenie správ do tzv. vlákien.
Reply-To:
Komu pôjde odpoveď, keď príjemca odpovie na túto správu.
Content-Type:
Správy obsahujúce prílohy v tejto položke nesú informáciu od druhu prílohy (video, zvuk, binárny súbor, archív, html, ...) a tiež reťazec podľa, ktorého sa dá určiť, kde príloha začína a končí (tzv. boundary).
X*
Existujú mnohé položky začínajúce písmenom X. Norma hovorí, že e-mailové programy, môžu takéto položky ignorovať. Používajú sa preto napr. pre informácie špecifické pre istý druh e-mailového programu, pre mail-listy a podobne.

Telo

Telo e-mailovej správy tvorí užívateľ a preto by sa mohlo zdať, že v ňom môže byť čokoľvek. Ale tak ako aj v iných oblastiach nášho života aj pre telo správy platia isté pravidlá. Spomeniem aspoň niekoľko z nich:

Okrem týchto pravidiel, ktoré onedlho oslávia 10 výročie vzniku, pridám ešte zopár rád vhodných v súčasnosti. V poslednej dobe sa na Internete šíri nemálo vírusov práve pomocou mailu. Veľká časť z nich sa spolieha na neopatrnosť užívateľov. Preto buďte opatrní; neotvárajte pripojené súbory od neznámych odosielateľov. Vírusy tiež často využívajú chyby v programoch na čítanie e-mailov. Voľte preto dobre.

A mail store is not a file system and SMTP is not a file transfer protocol.