Elektronická pošta a qmail

Pavel Kroča, yacht@mail.muni.cz


Obsah


Elektronická pošta

Elektronická pošta je velmi používaný prostředek komunikace na Internetu. Elektronický dopis se skládá ze zprávy a její obálky. Obálka obsahuje dodatečné informace jako je příjemce a odesílatel zprávy (nemusí se shodovat s poli To: a From: z hlavičky zprávy).

Zpráva se dále dělí na hlavičku a tělo. Pro formát hlavičky dopisu se používá styl popsaný v RFC-822.

Příklad mailu:

>From yacht@mail.cz Mon Oct 23 20:41:48 2000
Return-Path: <yacht@mail.cz>
Delivered-To: yacht@localhost
Received: (qmail 4372 invoked from network); 23 Oct 2000 20:41:47 -0000
Received: from localhost (127.0.0.1)
  by localhost with SMTP; 23 Oct 2000 20:41:47 -0000
Delivered-To: yacht@k0r3.reflektor.cz
Received: from mail.cz
        by localhost with POP3 (fetchmail-5.3.1)
        for yacht@localhost (single-drop); Mon, 23 Oct 2000 22:41:47 +0200 (CEST)
Received: (qmail 6937 invoked by alias); 23 Oct 2000 20:31:01 -0000
Delivered-To: alias-yacht@mail.cz
Received: (qmail 6926 invoked by uid 202); 23 Oct 2000 20:31:00 -0000
Received: from ppp564.brno.worldonline.cz (HELO lgm.cyb.org) (212.11.117.42)
  by k0r3.reflektor.cz with SMTP; 23 Oct 2000 20:31:00 -0000
Received: (qmail 12981 invoked by uid 7000); 21 Oct 2000 13:06:42 -0000
From: yacht@mail.cz
Date: Sat, 21 Oct 2000 15:06:42 +0200
To: yacht@mail.cz
Subject: pokus
Message-ID: <20001021150642.A12975@lgm.cyb.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit
X-Mailer: Mutt 1.0.1i
Status: RO
Content-Length: 103
Lines: 8

pokusny
--
yacht (Pavel Kroča)

// don't worry   oo   yacht    \\
\\    be happy  \__/  @mail.cz //

SMTP

SMTP (Simple Mail Transfer Protocol) je protokol pro výměnu elektronické pošty používaný na internetu. Je specifikován v RFC-822.

Nejčastěji používané příkazy při SMTP přenosu:

HELO
Příkaz používaný k identifikaci odesílající strany. Parametr obsahuje hostname odesílající strany. Odpovědí je obdobná identifikace příjímající strany. Tento příkaz se používá jako první po stanovení spojení.
MAIL
Započíná přenos dopisu. Jako parametr je použita adresa odesílatele, příp. cesta k němu.
RCPT
Tímto příkazem se identifikuje příjemce, příp. cesta k němu.
DATA
Po tomto příkazu začíná samotný přenos dopisu, který se ukončí řádkem s tečkou.
RSET
Zruší aktuální transakci.
QUIT
Ukončí aktuální spojení.
NOOP
Neudělá nic.
Tyto příkazy musí být v každé implementaci SMTP.

Problém, kdy je v dopisu na řádku samostatná tečka se řeší takto:

  1. Předtím, než se pošle řádek dopisu, tak se zkontroluje první znak. Je-li to tečka, pak se na začátek ještě jedna přidá.
  2. Na příjemcově straně se pak každý řádek zkontroluje a pokud je tam jedna tečka, pak to znamená konec a pokud jsou tam dvě pak se ta jedna odstraní a pokračuje se dál.

Příklad typické SMTP transakce (přenášíme dopis od teodor@strom uživatelům nina, erik a silvie na stroji les, kde pro ninu a erika je dopis přijat a pro silvii ne):

R: 220 les Simple Mail Transfer Service Ready
S: HELO strom
R: 250 les

S: MAIL FROM:<teodor@strom>
R: 250 OK

S: RCPT TO:<nina@les>
R: 250 OK

S: RCPT TO:<silvie@les>
R: 550 No such user here

S: RCPT TO:<erik@les>
R: 250 OK

S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Blah blah blah...
S: ...etc. etc. etc.
S: .
R: 250 OK

S: QUIT
R: 221 les Service closing transmission channel

POP3 a IMAP

Pro vzdálený přístup k poštovním schránkám se mohou použít dva protokoly.
POP3
RFC-1939. Minimální implementace umožňuje přihlášení pod heslem, získání seznamu zpráv a jejich získání a smazání.
IMAP
RFC-1730. Oproti POP3 má více funkcí: umí vytvářt, mazat, přejmenovávat mailboxy, kontrolovat novou poštu RFC-822 a MIME parsing, vyhledávání v poště - no prostě taková vzdálená zpráva mailboxů.

Qmail

Qmail je bezpečný, spolehlivý a výkonný MTA. Jeho struktura je modulární - skládá se z několika různých programů, které běží pod různými uživateli a navzájem spolupracují. Podporuje dva druh mailboxů: klasický mbox formát a maildir formát.

Chování qmailu je hodně řízeno spoustou konfiguračních programů. Při instalaci se před samotnou kompilací specifikuje jenom umístění a jména uživatelů a skupin, pod kterými qmail poběží. Po instalaci se pak ješte qmailu řekne náš hostname a jsme s instalací hotovi.

Jedním z užitečných konfiguračních souborů je virtualdomains, který používa qmail-send a který určuje, kam se doručí zprávy v závislosti na příjemcově adrese. Každá řádek specifikuje jedno takové pravidlo. Toto pravidlo je tvaru user@domain:prepend. Jakmile qmail-send narazí na dopis kde příjemce je user@domain, pak to změní na prepend-user@domain a doručí jej lokálně.

Jeden z rozdílů oproti sendmailu je v silnější uživatelské konfiguraci. Soubor .qmail (obdoba .forward u sendmailu) obsahuje na každém řádku jedno doručovací pravidlo. Máme pět druhů těchto řádků:

  1. komentář (řádek začíná na #)
  2. program (řádek začíná na |)
  3. přesměrování (řádek začíná na &)
  4. mbox (řádek začíná na [./] a nekončí na /)
  5. maildir (řádek začíná na [./] a končí na /)

Postup práce qmailu při doručování pošty: