doručenky/dsn-doručenky-references.pl
changeset 22 0eca162a758c
parent 21 a5c8edf14f82
child 23 c78f71bda340
     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 -}