1 # E-mailové doručenky je dobré dávat do složky s odeslanou poštou,
2 # kde se můžou řadit do vláken pod zprávu, ke které patří.
4 # Potvrzení o přečtení posílané klientem (Content-Type: multipart/report; report-type=disposition-notification;)
5 # obsahují hlavičku References se správným Message-ID, takže to funguje.
7 # Ale potvrzení o doručení posílané serverem příjemce (Content-Type: multipart/report; report-type=delivery-status;)
8 # tuto hlavičku neobsahují, takže si je klient odesílatele nemůže správně zařadit do vlákna pod odeslanou zprávu.
11 # 1) server příjemce tuto hlavičku bude vyplňovat – ideální, ale nemůžeme ovlivnit
12 # 2) na serveru odesílatele původní zprávy (u nás) budeme doplňovat hlavičku References
13 # na základě obsahu přílohy doručenky (text/rfc822-headers), která obsahuje všechny hlavičky
14 # (včetně potřebného Message-ID) původní odeslané zprávy
15 # a) uděláme to tímto milterem
16 # b) pomocí sieve přesměrujeme doručenky na adresu, kde čeká skript/program (roura), který doplní hlavičku a pošle nám zprávu zpátky
18 # Tento milter není hotový a pravděpodobně bude lepší řešení b)
19 # doručenek je totiž minimum z celkového objemu zpráv, a proto bude lepší přes doplňovač prohnat jen doručenky (filtrované sievem)
21 # Instalace tohoto milteru:
22 # aptitude install libsendmail-milter-perl
23 # spustit tento skript → vytvoří unixový socket
24 # v postfixu v main.cf nastavit: smtpd_milters = … unix:/dorucenky/dorucenky.sock
26 # http://search.cpan.org/~cying/Sendmail-Milter-0.18/Milter.pm
29 # při jakých akcích bude náš milter volán
30 my %my_milter_callbacks =
32 'eoh' => \&my_eoh_callback,
33 'body' => \&my_body_callback,
34 'eom' => \&my_eom_callback,
35 'abort' => \&my_abort_callback,
43 # zda se jedná o doručenku
44 # zda už neobsahuje hlavičku References
45 return SMFIS_CONTINUE;
52 # TODO: načíst Message-ID z části s Content-Type: text/rfc822-headers
53 return SMFIS_CONTINUE;
60 # TODO: přidat hlavičku References s Message-ID původně odeslané zprávy
61 $ctx->addheader("X-Perl", "byl jsem tu");
66 # nečekaný konec spojení
72 return SMFIS_CONTINUE;
78 # autokonfiguraci nepoužijeme (to je pro Sendmail)
79 # Sendmail::Milter::auto_setconn("myfilter");
81 Sendmail::Milter::setconn("local:/var/spool/postfix/dorucenky/dorucenky.sock");
82 Sendmail::Milter::register("myfilter", \%my_milter_callbacks, SMFI_CURR_ACTS);
83 Sendmail::Milter::main();
84 # Never reaches here, callbacks are called from Milter.