diff -r 9e680fd9d8f8 -r 2a00ee0b740a milter/dsn-doručenky-references.pl --- a/milter/dsn-doručenky-references.pl Mon Nov 28 13:53:59 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -# E-mailové doručenky je dobré dávat do složky s odeslanou poštou, -# kde se můžou řadit do vláken pod zprávu, ke které patří. -# -# Potvrzení o přečtení posílané klientem (Content-Type: multipart/report; report-type=disposition-notification;) -# obsahují hlavičku References se správným Message-ID, takže to funguje. -# -# Ale potvrzení o doručení posílané serverem příjemce (Content-Type: multipart/report; report-type=delivery-status;) -# tuto hlavičku neobsahují, takže si je klient odesílatele nemůže správně zařadit do vlákna pod odeslanou zprávu. -# -# Možná řešení: -# 1) server příjemce tuto hlavičku bude vyplňovat – ideální, ale nemůžeme ovlivnit -# 2) na serveru odesílatele původní zprávy (u nás) budeme doplňovat hlavičku References -# na základě obsahu přílohy doručenky (text/rfc822-headers), která obsahuje všechny hlavičky -# (včetně potřebného Message-ID) původní odeslané zprávy -# a) uděláme to tímto milterem -# 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 - -# Tento milter není hotový a pravděpodobně bude lepší řešení b) -# 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) - -# Instalace tohoto milteru: -# aptitude install libsendmail-milter-perl -# spustit tento skript → vytvoří unixový socket -# v postfixu v main.cf nastavit: smtpd_milters = … unix:/dorucenky/dorucenky.sock - -# http://search.cpan.org/~cying/Sendmail-Milter-0.18/Milter.pm -use Sendmail::Milter; - -# při jakých akcích bude náš milter volán -my %my_milter_callbacks = -( - 'eoh' => \&my_eoh_callback, - 'body' => \&my_body_callback, - 'eom' => \&my_eom_callback, - 'abort' => \&my_abort_callback, -); - -# konec hlaviček -sub my_eoh_callback -{ - my $ctx = shift; - # TODO: zkontrolovat - # zda se jedná o doručenku - # zda už neobsahuje hlavičku References - return SMFIS_CONTINUE; -} - -# po každé MIME části -sub my_body_callback -{ - my $ctx = shift; - # TODO: načíst Message-ID z části s Content-Type: text/rfc822-headers - return SMFIS_CONTINUE; -} - -# konec zprávy -sub my_eom_callback -{ - my $ctx = shift; - # TODO: přidat hlavičku References s Message-ID původně odeslané zprávy - $ctx->addheader("X-Perl", "byl jsem tu"); - $ctx->setpriv(undef); - return SMFIS_ACCEPT; -} - -# nečekaný konec spojení -sub my_abort_callback -{ - my $ctx = shift; - # uklidit po sobě - $ctx->setpriv(undef); - return SMFIS_CONTINUE; -} - - -BEGIN: -{ - # autokonfiguraci nepoužijeme (to je pro Sendmail) - # Sendmail::Milter::auto_setconn("myfilter"); - - Sendmail::Milter::setconn("local:/var/spool/postfix/dorucenky/dorucenky.sock"); - Sendmail::Milter::register("myfilter", \%my_milter_callbacks, SMFI_CURR_ACTS); - Sendmail::Milter::main(); - # Never reaches here, callbacks are called from Milter. -}