QMAIL

Qmail je náhrada sendmailu. Tento  výtah z dokumentace obsahuje informace užitečné pro uživatele (ne pro administrátory systému). Originální dokumentace je přístupná na www.qmail.org.

Obsah

dot-qmail
základní popis souboru .qmail a jeho použití ("ekvivalent" .forward u sendmailu)
poznámky k souboru .qmail
rozšířené adresy
ošetření chyb
programy spouštěné přes .qmail
mailsubj program

dot-qmail (.qmail)

Každý uživatel si může ve svém domácím adresáři vytvořit (například textovým editorem joe) soubor .qmail, kterým může měnit doručování e-mailu (pokud administrátor systému tuto možnost neomezí).

Standardně Qmail nově došlé dopisy ukládá do souboru Mailbox v domácím adresáři uživatele. Pokud existuje v domácím adresáři soubor .qmail a má nenulovou délku, řídí se Qmail při doručování pošty instrukcemi v něm uvedenými. Pokud soubor .qmail existuje, ale je prázdný, Qmail doručuje poštu standardně do Mailbox.

Formát souboru .qmail

Každý řádek může obsahovat jednu instrukci, Qmail je vykonává postupně. Instrukce mohou být:

  1. forward dopisu na jinou adresu - na prvním místě řádky znak '&', pak adresa.
    Příklad:   &Jan.Jirka@nekde.jinde.cz
  2. uložení dopisu do jiného souboru než Mailbox - na řádku je jméno souboru včetně cesty. Řádek musí začínat lomítkem nebo tečkou a nesmí končit lomítkem.
    Příklad:  ./Mail/dopisy
  3. uložení dopisu ne do souboru, ale do maildir - na řádku je jméno adresáře (s lomítkem na konci) včetně cesty. Řádka musí začínat lomítkem nebo tečkou, musí končit lomítkem.
    Příklad: ./Maildir
  4. předání dopisu nějakému programu ke zpracování - řádka začíná svislítkem, za ním jméno programu.
    Příklad: | progmail

    Poznámka: většina známých programů pro zpracování pošty (např. program filter, doplněk programu elm) potřebuje přidat program preline.
    Příklad: | preline /usr/local/bin/filter
  5. komentář - řádka začíná znakem '#'
    Příklad: # toto je komentar

Příklady:

Uživatel si chce přesměrovat všechnu poštu na adresu jan.jirka@post.cz. .qmail může obsahovat:

&jan.jirka@post.cz

Uživatel, který má login jirkaj, chce, aby mu pošta byla přesměrována na adresu jan.jirka@post.cz, ale kopii každého dopisu chce pro jistotu ponechat i zde (neboli standardně uložit do souboru Mailbox v domácím adresáři). Do souboru .qmail napíše (s komentářem):

# vsechno forwarduj na jan.jirka@post.cz,
# kopii ponech tady
&jan.jirka@post.cz
./Mailbox

Poznámky

Přístupová práva

Qmail kontroluje  přístupová práva k souboru .qmail a do domácího adresáře uživatele a v některých případech z bezpečnostních důvodů poštu nedoručí a ponechá ji ve frontě:

Problém při zápisu do souboru Mailbox - quota

Pokud Qmail při ukládání dopisu do souboru Mailbox zjistí, že nemůže dopis uložit celý, protože uživatel má zaplněné všechno přidělené místo na disku (dojde k překročení přidělené quoty), ponechá dopis ve frontě a Mailbox zkrátí na původní délku. Uživatel tedy nezjistí, že mu přišel dopis, který se mu na disk nevešel. Dopis čeká ve frontě a Qmail se ho pokouší v pravidelných intervalech doručit znovu. Pokud uživatel uvolní dost místa, doručí ho, pokud ne, vrátí ho zpět jako nedoručitelný. Mezitím se mohou do Mailboxu uložit další kratší nově došlé dopisy. Problém je v tom, že uživatel není informovaný o tom, že ve frontě pro něj čeká velký dopis, pro který by měl na disku uvolnit místo.

Různé

Pokud .qmail obsahuje samé komentáře, pošta se zdá se někam ztrácí :-( Pozor na to.

Rozšířené adresy

Každý uživatel si může zavést další adresy ve tvaru login-něco@server.domena (nebo login-něco@doména, záleží na konfiguraci serveru). Pošta poslaná na tyto adresy se řídí podle souborů .qmail-něco v uživatelově domácím adresáři, obsah souborů je stejný jako u .qmail.

Příklad: Uživatel jirkaj chce, aby mu známí posílali urgentní vzkazy na mobilní telefon (adresa +420603712345@sms.paegas.cz), ale nechce zveřejnit jeho telefonní číslo. Vytvoří si proto adresu jirkaj-urgent@ruk.cuni.cz a poštu z ní forwarduje na mobilní telefon. Založí si soubor .qmail-urgent a do něj napíše

&+420603712345@sms.paegas.cz

Pokud pro adresu příslušný .qmail-něco neexistuje, Qmail hledá soubor .qmail-default a řídí se podle něho. Pokud ani ten neexistuje, vrátí poštu jako nedoručitelnou.

Ošetření chyb

Qmail při zpracování instrukcí v souboru .qmail postupuje takto:

  1. postupně prochází řádky a provádí je. Vyjímka jsou forwardy, ty si schovává a provede je všechny nakonec.
  2. pokud se provedení instrukce (spuštění programu nebo uložení do souboru nebo maildir) nepovede nebo pokud program vrátí návratový kód 99, dál už nepokračuje, vyřídí jen všechny forwardy, které dosud našel.
  3. pokud vše provede úspěšně, provede jako poslední forwardy.

Pokud se všechny instrukce mají provést nezávisle na sobě a krach jedné neovlivnit provedení ostatních, chce to vytvořit pro každou samostatný .qmail-něco soubor a do .qmail dát jen forwardy na všechny .qmail-něco soubory s instrukcemi. Ty se pak provádějí současně.

Programy spouštěné přes .qmail

Jestliže .qmail soubor obsahuje instrukci | program , Qmail spustí sh -c program v domácím adresáři uživatele a předá mu dopis na standardní vstup. Program s nastaveným SUID bitem spustit odmítne. Záhlaví dopisu nezačíná standardním From řádkem. Programy, které pracovaly se sendmailem, ho většinou potřebují. Je možné ho doplnit programem preline (.qmail pak obsahuje | preline program ).

Návratové kódy programu jsou interpretovány následovně: 0 znamená úspěšné doručení; 99 znamená, že doručení bylo úspěšné, ale Qmail nemá pokračovat v interpretování dalších příkazů v .qmail souboru; 100 znamená, že doručení se nezdařilo (hard error); 111 znamená, že doručení v této chvíli není možné, ale má se za chvíli zkusit znovu (dopis zůstane ve frontě, soft error); 64, 65, 70, 76, 77, 78 a 112 hard error; ostatní soft error.

Qmail nastaví spouštěnému programu několik proměnných prostředí:
SENDER - adresa odesílatele
NEWSENDER - adresa odesílatele (??)
RECIPIENT - adresa příjemce ve tvaru local@domain
USER - login uživatele
HOME - domácí adresář uživatele
HOST - domain část adresy příjemce
LOCAL - část adresy příjemce před zavináčem
EXT - .qmail extenze (.qmail-ext)
EXT2 - druhá .qmail extenze (.qmail-ext-ext2)
EXT3 - třetí .qmail extenze (.qmail-ext-ext2-ext3)
EXT4 - čtvrtá .qmail extenze (.qmail-ext-ext2-ext3-ext4)
DTLINE - Delivered-To: řádka záhlaví
RPLINE - Return-Path: řádka záhlaví
UFLINE - UUCP-style From řádka (první řádka záhlaví dopisu v mailboxu)

POZOR! Proměnné prostředí nejsou v uvozovkách, mohou obsahovat speciální znaky, které při jejich zpracování v shellu mohou způsobit nežádoucí chování programu (potenciální "security hole", kterou musí ošetřit autor programu).


mailsubj

Jednoduchý program pro odesílání pošty (náhrada klasického unixového mail)

Použití: mailsubj subject adresa1 adresa2 ...

Text dopisu čte ze svého standardního vstupu

Příklad: cat dopis | /var/qmail/binmailsubj 'pozvanka na predtaveni' jan.jirka@ruk.cuni.cz