1.1 --- a/doručenky/dsn-doručenky-references.pl Wed Nov 30 15:44:34 2011 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,85 +0,0 @@
1.4 -# E-mailové doručenky je dobré dávat do složky s odeslanou poštou,
1.5 -# kde se můžou řadit do vláken pod zprávu, ke které patří.
1.6 -#
1.7 -# Potvrzení o přečtení posílané klientem (Content-Type: multipart/report; report-type=disposition-notification;)
1.8 -# obsahují hlavičku References se správným Message-ID, takže to funguje.
1.9 -#
1.10 -# Ale potvrzení o doručení posílané serverem příjemce (Content-Type: multipart/report; report-type=delivery-status;)
1.11 -# tuto hlavičku neobsahují, takže si je klient odesílatele nemůže správně zařadit do vlákna pod odeslanou zprávu.
1.12 -#
1.13 -# Možná řešení:
1.14 -# 1) server příjemce tuto hlavičku bude vyplňovat – ideální, ale nemůžeme ovlivnit
1.15 -# 2) na serveru odesílatele původní zprávy (u nás) budeme doplňovat hlavičku References
1.16 -# na základě obsahu přílohy doručenky (text/rfc822-headers), která obsahuje všechny hlavičky
1.17 -# (včetně potřebného Message-ID) původní odeslané zprávy
1.18 -# a) uděláme to tímto milterem
1.19 -# 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
1.20 -
1.21 -# Tento milter není hotový a pravděpodobně bude lepší řešení b)
1.22 -# 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)
1.23 -
1.24 -# Instalace tohoto milteru:
1.25 -# aptitude install libsendmail-milter-perl
1.26 -# spustit tento skript → vytvoří unixový socket
1.27 -# v postfixu v main.cf nastavit: smtpd_milters = … unix:/dorucenky/dorucenky.sock
1.28 -
1.29 -# http://search.cpan.org/~cying/Sendmail-Milter-0.18/Milter.pm
1.30 -use Sendmail::Milter;
1.31 -
1.32 -# při jakých akcích bude náš milter volán
1.33 -my %my_milter_callbacks =
1.34 -(
1.35 - 'eoh' => \&my_eoh_callback,
1.36 - 'body' => \&my_body_callback,
1.37 - 'eom' => \&my_eom_callback,
1.38 - 'abort' => \&my_abort_callback,
1.39 -);
1.40 -
1.41 -# konec hlaviček
1.42 -sub my_eoh_callback
1.43 -{
1.44 - my $ctx = shift;
1.45 - # TODO: zkontrolovat
1.46 - # zda se jedná o doručenku
1.47 - # zda už neobsahuje hlavičku References
1.48 - return SMFIS_CONTINUE;
1.49 -}
1.50 -
1.51 -# po každé MIME části
1.52 -sub my_body_callback
1.53 -{
1.54 - my $ctx = shift;
1.55 - # TODO: načíst Message-ID z části s Content-Type: text/rfc822-headers
1.56 - return SMFIS_CONTINUE;
1.57 -}
1.58 -
1.59 -# konec zprávy
1.60 -sub my_eom_callback
1.61 -{
1.62 - my $ctx = shift;
1.63 - # TODO: přidat hlavičku References s Message-ID původně odeslané zprávy
1.64 - $ctx->addheader("X-Perl", "byl jsem tu");
1.65 - $ctx->setpriv(undef);
1.66 - return SMFIS_ACCEPT;
1.67 -}
1.68 -
1.69 -# nečekaný konec spojení
1.70 -sub my_abort_callback
1.71 -{
1.72 - my $ctx = shift;
1.73 - # uklidit po sobě
1.74 - $ctx->setpriv(undef);
1.75 - return SMFIS_CONTINUE;
1.76 -}
1.77 -
1.78 -
1.79 -BEGIN:
1.80 -{
1.81 - # autokonfiguraci nepoužijeme (to je pro Sendmail)
1.82 - # Sendmail::Milter::auto_setconn("myfilter");
1.83 -
1.84 - Sendmail::Milter::setconn("local:/var/spool/postfix/dorucenky/dorucenky.sock");
1.85 - Sendmail::Milter::register("myfilter", \%my_milter_callbacks, SMFI_CURR_ACTS);
1.86 - Sendmail::Milter::main();
1.87 - # Never reaches here, callbacks are called from Milter.
1.88 -}