Skip to content
Snippets Groups Projects

Zpracování nedoručenek

Merged Martin Mareš requested to merge dsn into devel

Files

doc/dsn.md 0 → 100644
+ 51
0
# Zpracování mailových nedoručenek (DSN)
## Princip
Kdykoliv OSMO odesílá mail, umí do obálkového FROM přidat token
(oddělený od jména uživatele pluskem), do kterého je zakódováno,
kterého uživatele nebo pokusu o registraci se mail týká.
Pokud přijde nedoručenka, OSMO ji zpracuje a z tokenu v adrese
jejího adresáta určí, ke komu patří. K uživatelům a probíhajícím
registracím si pak poznamená informaci o nefunkčnosti e-mailové
adresy a umí ji uživateli zobrazit.
## Implementace
Nedoručenky se posílají na osmo-auto+token@mo.mff.cuni.cz, což se
přepíše na mo-web+dsn@gimli.ms.mff.cuni.cz.
Účet mo-web má nakonfigurovaný následující filtr pro Sieve:
require ["envelope", "subaddress", "include", "mailbox", "vnd.dovecot.execute"];
# Základní systémová pravidla
include :global "default";
if envelope :detail :matches "To" ["dsn", "dsn+*"] {
if execute :pipe "osmo-send-dsn" ["https://osmo.matematickaolympiada.cz/"] {
redirect "spravce+osmo-dsn-ok@example.org";
} else {
redirect "spravce+osmo-dsn-error@example.org";
}
} else {
redirect "spravce+osmo-unknown@example.org";
}
To spustí program bin/send-dsn, nainstalovaný jako
/usr/local/lib/dovecot/sieve-execute/osmo-send-dsn,
a ten předá nedoručenku webové části OSMO. Pokud zrovna webová část
neběží nebo neumí nedoručenku zpracovat, osmo-send-dsn selže, takže
Sieve nedoručenku přepošle správci.
Webová část si vyparsuje token z hlavičkového To, takže interní
přeposílání během doručování ji nezmate.
Skript bin/send-dsn je minimalistický, stačí mu Python se standardní
knihovnou Pythonu a balíčkem requests. Skript může běžet pod jiným
uživatelem, nebo dokonce na jiném stroji než zbytek OSMO.
Komunikace mezi bin/send-dsn a zbytkem OSMO je autorizována tajným
klíčem. Web OSMO si ho přečte z DSN_API_KEY z configu, send-dsn
ho hledá jako jediný řádek souboru ~/.config/osmo/dsn-api-key.
Loading