Email

Tomáš Staněk (xstanek1@fi.muni.cz)


Obsah


1 Historie


2 Transportní protokoly

2.1 SMTP (Simple Mail Transfer Protocol)

Nejdůležitější protokol v kontextu emailu. Slouží pro odesíláni zpráv na vzdálený server.
	220 mail.heaven.org ESMTP
HELO mail.daemonic.org
	250 mail.heaven.org
MAIL FROM: 
	250 ok
RCPT TO: 
	250 ok
DATA
	354 go ahead
From: Samael 
Subject: manpage missing
Hi

Bugreporting missing manpage. While man man works fine, 
man woman gives: No manual entry for woman
(running NetBSD-current)
.
	250 ok 1081297204 qp 11976
QUIT
	221 mail.heaven.org

2.2 POP3 (Post Office Protocol 3) (RFC:1225)

Slouží pro vybírání/mazání mailů ze vzdáleneho serveru.
	+OK <12008.1081297581@pop3.heaven.org>
USER god
	+OK
PASS plan9
	+OK
STAT
	+OK 1331 13317080
LIST
	+OK
	1 34447
	2 768
	3 734
...
	1329 747
	1330 1102
	1331 1115
	.
RETR 1331
	+OK
	Return-Path: 
	Delivered-To: god@heaven.org
	Received: (qmail 12030 invoked by alias); 7 Apr 2004 00:32:00 -0000
	Delivered-To: root@lheaven.org
	Received: (qmail 12027 invoked from network); 7 Apr 2004 00:31:57 -0000
	Received: from mail.deamonic.org (HELO mail.deamonic.org) (666.666.666.666)
  	by 0 with SMTP; 7 Apr 2004 00:31:57 -0000
	
	From: Samael 
	Subject: manpage missing
	Hi
	
	Bugreporting missing manpage. While man man works fine,
	man woman gives: No manual entry for woman
	(running NetBSD-current)
	.
DELE 1331
	+OK
QUIT
	+OK

2.3 IMAP (Internet Mail Access Protocol) (RFC:2192)

Stejně jako pop3 slouží k manipulaci s maily na vzdáleném serveru. Oproti POP3 umoznuje:
	* OK example.com IMAP4rev1 v12.264 server ready                                                                            
A0001 USER "frobozz" "xyzzy"                                                                                               
	* OK User frobozz authenticated                                                                                            
A0002 SELECT INBOX                                                                                                         
	* 1 EXISTS                                                                                                                 
	* 1 RECENT                                                                                                                 
	* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)                                                                         
	* OK [UNSEEN 1] first unseen message in /var/spool/mail/esr                                                                
A0002 OK [READ-WRITE] SELECT completed                                                                                     
A0003 FETCH 1 RFC822.SIZE                    Get message sizes                                                             
	* 1 FETCH (RFC822.SIZE 2545)                                                                                               
A0003 OK FETCH completed                                                                                                   
A0004 FETCH 1 BODY[HEADER]                   Get first message header                                                      
	* 1 FETCH (RFC822.HEADER {1425}                                                                                            
	                                                                                 
	)                                                                                                                          
A0004 OK FETCH completed                                                                                                   
A0005 FETCH 1 BODY[TEXT]                     Get first message body                                                        
	* 1 FETCH (BODY[TEXT] {1120}                                                                                               
	                                                                                 
	)                                                                                                                          
	* 1 FETCH (FLAGS (\Recent \Seen))                                                                                          
A0005 OK FETCH completed                                                                                                   
A0006 LOGOUT                                                                                                               
	* BYE example.com IMAP4rev1 server terminating connection                                                                  
A0006 OK LOGOUT completed                                  

2.4 Další protokoly

3 Pojmy a obecné fungování emailu

Fungování emailu je technicky relativně jednoduché. Obecně existují nějaké mailové schránky na nějakých mailových serverech. V nejjednodušším případě v sobě emailová adresa obsahuje název schránky a serveru s touto schránkou. V idealnim připadě nejsou věci jako relaying, nebo domenovy koš zapotřebí. MTA dostane lokálne od MUA zprávu a kam ji doručit. Řekněme mail pro novak@mail.cz. MTA se připoji na mail.cz:25, kde poslouchá vzdaleny MTA a smtp protokolem pošle mail. V pripade, že schránka novak na serveru mail.cz existuje, pro odesílatele je hotovo. Uživatel novak se pak třeba pres ssh přihlásí na mail.cz, pustí MUA a ten řekne lokálnímu MTA o jeho maily, nebo se připoji pomocí pop3 a opět řekne MTA na mail.cz o svoje maily. První komplikace nastáva, když schránka novak na mail.cz neexistuje. V tom případě může posílání mailu selhat už při SMTP spojení. Obecně však nemusí (např. qmail). V tom případě MTA na mail.cz posílá mail o nemožnosti doručeni na Return-Path adresu, uvedenou v hlavičce.

3.1 MX záznamy

Ve zmíněném příkladu jsem předpokládal, že mail.cz je skutečne mailserver. Může ale nastat situace, kdy není a MTA na to tedy nemůže spoléhat. Nejdříve se tedy musi zeptat na MX zaznam pro danou doménu (např. university.edu) a ten ho odkáže na smtp server(y) pro danou domenu. Záznamy jsou tvaru mx1.university.edu, obecně jich může byt vice a čislo 1 určuje preferenci serveru (nižší číslo -> vyšší preference). Může se vyskytovat více stejných mx záznamů.

3.2 Relaying

Relaying se týká pouze odesílání mailu. To často neprobíhá přímo, jako v uvedeném příkladu, ale přes nějaký další mailserver. Například v nějakem LAN prostředí, nebo pokud uživatel svoje maily posíla pres svého ISP.

4 Formát mailu

Nejnovejsi RFC: 2822 http://cr.yp.to/immhf.html

5 Další věci s emailem spjaté

6 Mail servery

6.1 qmail

autor: Daniel Bernstein

Nevýhody: Výhody: Relevantni programy: http://www.nrg4u.com/qmail/the-big-qmail-picture-103-p3.gif http://www.nrg4u.com/qmail/the-big-qmail-picture-103-p4.gif dokumentace přimo z .tar.gz http://cr.yp.to/qmail.html http://www.qmail.org http://www.lifewithqmail.org

instalace ucspi-tcp

$ wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
$ gunzip -c ucspi-tcp-0.88.tar.gz | tar xf -
$ cd ucspi-tcp-0.88
[$ vi conf-home] pokud chceme instalovat jinam, nez /usr/local/
$ make
# make setup

instalace checkpassword

$ wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
$ gunzip -c checkpassword-0.90.tar.gz | tar xf -
$ cd checkpassword-0.90
[$ vi conf-home] pokud chceme instalovat jinam, nez /
$ make
# make setup

instalace daemontools

wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
$ gunzip -c daemontools-0.76.tar.gz | tar xf -
$ cd admin/daemontools-0.76

pravdepodobne nechceme, aby instalace iniciativne menila /etc/inittab,
tim spoustela nejaky svscan, vytvarela nejake /services a /command a tak podobne
$ echo "" > package/run
$ echo "" > package/upgrade

# ./package/install

instalace qmailu

$ wget ftp://ftp.ntnu.no/pub/unix/mail/qmail/qmail-1.03.tar.gz
$ gunzip -c qmail-1.03.tar.gz | tar xf -
$ cd qmail-1.03
[ $ vi conf-qmail ] pokud chceme instalovat jinam, nez /var/qmail

# mkdir /var/qmail

ruzne casti qmailu bezi pod ruznymi uzivately (je mozno menit pod kterymi v conf-users a conf-groups)
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails

$ make
# make setup

vytvoreni defaultni konfigurace ve /var/qmail/control/
# ./config-fast your.full.host.name

vytvoreni virtualnich uctu
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*

pro kazdeho noveho uzivatele chceme automaticky Maildir, do ktereho se bude dorucovat posta
a soubor .qmail, ktery rekne qmailu, aby dorucoval prave do Maildiru
# /var/qmail/bin/maildirmake /etc/skel/Maildir/
# echo ./Maildir/ > /etc/skel/.qmail

ve /var/qmail/boot je nekolik ukazek startovacich skriptu
muze vypadat napriklad:
exec env - PATH="/var/qmail/bin:/usr/local/bin/:$PATH" \
qmail-start ./Maildir/ splogger qmail
cims rikame qmailu, ze bude defaultne (pokud neexistuje ~/.qmail) do ~./Maildir/
a logovat bude pres syslog s prefixem qmail
Veškerá konfigurace mailového systému je ve /var/qmail/control/ a v souborech ~/.qmail /var/qmail/control/* určují chování mailového systému, jako takového, ~/.qmail soubory pak určují chovaní qmail-local, tedy doručovaní konkretnímu uživateli. Umožnují uložit mail do konkrétního maildiru/mailboxu, forwardovat mail, nebo spustit program. Tím se dá zařídit například mailová konference, nebo třídení mailu do konkrétních maildirů například podle odesílatele.
|condtomaildir ./Maildir/arm ifaddr cc from to : linux-arm@lists.arm.linux.org.uk
|condtomaildir ./Maildir/pgui/cvs ifaddr cc from to : pgui-commits@lists.sourceforge.net
./Maildir/

6.2 smtp

#!/bin/sh
exec /usr/local/bin/tcpserver -vl0 -u `id -u qmaild` -g `id -g qmaild` 0 smtp \
/var/qmail/bin/qmail-smtpd

6.2.1 Relaying

Relaying se na qmailu kvuli odděleni superserveru a samotného smtp serveru řeší mirně podivně přes proměnou prostředi RELAYCLIENT. Pokud je proměná RELAYCLIENT nastavená na "", qmail-smtpd ignoruje rcpthosts, přijme mail a snaží se ho doručit. Při navázání spojení tedy musí superserver pro určité adresy tuto proměnou nastavit. Při použití tcpserveru se toho docílí cdb pravidly:
127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
skript pro startování smtp služby pak bude vypadat například takto:
#!/bin/sh
exec /usr/local/bin/tcpserver -vl0 -u `id -u qmaild` -g `id -g qmaild` -x /var/services/qmail-smtp/rules.cdb 0 smtp \
/var/qmail/bin/qmail-smtpd
(soubor rules.cdb je binární. pro jeho kompilaci slouží tcprules)

6.3 pop3

V qmailu obsažený pop3 server podporuje pouze Maildir.
#!/bin/sh
exec /usr/local/bin/tcpserver -vl0 0 110 \
	/var/qmail/bin/qmail-popup \
	l235.brno.mistral.cz /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir

6.4 imap

imap servery používané s qmailem:
http://www.bincimap.org/
http://www.inter7.com/courierimap.html