1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/doručenky/doručenky.sieve Wed Nov 30 15:40:16 2011 +0100
1.3 @@ -0,0 +1,7 @@
1.4 +require ["fileinto"];
1.5 +# rule:[doručenky]
1.6 +if anyof (header :contains "Content-Type" "report-type=disposition-notification;", header :contains "Content-Type" "report-type=delivery-status;")
1.7 +{
1.8 + fileinto "Sent";
1.9 + stop;
1.10 +}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/doručenky/dsn-doručenky-references.pl Wed Nov 30 15:40:16 2011 +0100
2.3 @@ -0,0 +1,85 @@
2.4 +# E-mailové doručenky je dobré dávat do složky s odeslanou poštou,
2.5 +# kde se můžou řadit do vláken pod zprávu, ke které patří.
2.6 +#
2.7 +# Potvrzení o přečtení posílané klientem (Content-Type: multipart/report; report-type=disposition-notification;)
2.8 +# obsahují hlavičku References se správným Message-ID, takže to funguje.
2.9 +#
2.10 +# Ale potvrzení o doručení posílané serverem příjemce (Content-Type: multipart/report; report-type=delivery-status;)
2.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.
2.12 +#
2.13 +# Možná řešení:
2.14 +# 1) server příjemce tuto hlavičku bude vyplňovat – ideální, ale nemůžeme ovlivnit
2.15 +# 2) na serveru odesílatele původní zprávy (u nás) budeme doplňovat hlavičku References
2.16 +# na základě obsahu přílohy doručenky (text/rfc822-headers), která obsahuje všechny hlavičky
2.17 +# (včetně potřebného Message-ID) původní odeslané zprávy
2.18 +# a) uděláme to tímto milterem
2.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
2.20 +
2.21 +# Tento milter není hotový a pravděpodobně bude lepší řešení b)
2.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)
2.23 +
2.24 +# Instalace tohoto milteru:
2.25 +# aptitude install libsendmail-milter-perl
2.26 +# spustit tento skript → vytvoří unixový socket
2.27 +# v postfixu v main.cf nastavit: smtpd_milters = … unix:/dorucenky/dorucenky.sock
2.28 +
2.29 +# http://search.cpan.org/~cying/Sendmail-Milter-0.18/Milter.pm
2.30 +use Sendmail::Milter;
2.31 +
2.32 +# při jakých akcích bude náš milter volán
2.33 +my %my_milter_callbacks =
2.34 +(
2.35 + 'eoh' => \&my_eoh_callback,
2.36 + 'body' => \&my_body_callback,
2.37 + 'eom' => \&my_eom_callback,
2.38 + 'abort' => \&my_abort_callback,
2.39 +);
2.40 +
2.41 +# konec hlaviček
2.42 +sub my_eoh_callback
2.43 +{
2.44 + my $ctx = shift;
2.45 + # TODO: zkontrolovat
2.46 + # zda se jedná o doručenku
2.47 + # zda už neobsahuje hlavičku References
2.48 + return SMFIS_CONTINUE;
2.49 +}
2.50 +
2.51 +# po každé MIME části
2.52 +sub my_body_callback
2.53 +{
2.54 + my $ctx = shift;
2.55 + # TODO: načíst Message-ID z části s Content-Type: text/rfc822-headers
2.56 + return SMFIS_CONTINUE;
2.57 +}
2.58 +
2.59 +# konec zprávy
2.60 +sub my_eom_callback
2.61 +{
2.62 + my $ctx = shift;
2.63 + # TODO: přidat hlavičku References s Message-ID původně odeslané zprávy
2.64 + $ctx->addheader("X-Perl", "byl jsem tu");
2.65 + $ctx->setpriv(undef);
2.66 + return SMFIS_ACCEPT;
2.67 +}
2.68 +
2.69 +# nečekaný konec spojení
2.70 +sub my_abort_callback
2.71 +{
2.72 + my $ctx = shift;
2.73 + # uklidit po sobě
2.74 + $ctx->setpriv(undef);
2.75 + return SMFIS_CONTINUE;
2.76 +}
2.77 +
2.78 +
2.79 +BEGIN:
2.80 +{
2.81 + # autokonfiguraci nepoužijeme (to je pro Sendmail)
2.82 + # Sendmail::Milter::auto_setconn("myfilter");
2.83 +
2.84 + Sendmail::Milter::setconn("local:/var/spool/postfix/dorucenky/dorucenky.sock");
2.85 + Sendmail::Milter::register("myfilter", \%my_milter_callbacks, SMFI_CURR_ACTS);
2.86 + Sendmail::Milter::main();
2.87 + # Never reaches here, callbacks are called from Milter.
2.88 +}
3.1 --- a/milter/doručenky.sieve Mon Nov 28 13:53:59 2011 +0100
3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
3.3 @@ -1,7 +0,0 @@
3.4 -require ["fileinto"];
3.5 -# rule:[doručenky]
3.6 -if anyof (header :contains "Content-Type" "report-type=disposition-notification;", header :contains "Content-Type" "report-type=delivery-status;")
3.7 -{
3.8 - fileinto "Sent";
3.9 - stop;
3.10 -}
4.1 --- a/milter/dsn-doručenky-references.pl Mon Nov 28 13:53:59 2011 +0100
4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
4.3 @@ -1,85 +0,0 @@
4.4 -# E-mailové doručenky je dobré dávat do složky s odeslanou poštou,
4.5 -# kde se můžou řadit do vláken pod zprávu, ke které patří.
4.6 -#
4.7 -# Potvrzení o přečtení posílané klientem (Content-Type: multipart/report; report-type=disposition-notification;)
4.8 -# obsahují hlavičku References se správným Message-ID, takže to funguje.
4.9 -#
4.10 -# Ale potvrzení o doručení posílané serverem příjemce (Content-Type: multipart/report; report-type=delivery-status;)
4.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.
4.12 -#
4.13 -# Možná řešení:
4.14 -# 1) server příjemce tuto hlavičku bude vyplňovat – ideální, ale nemůžeme ovlivnit
4.15 -# 2) na serveru odesílatele původní zprávy (u nás) budeme doplňovat hlavičku References
4.16 -# na základě obsahu přílohy doručenky (text/rfc822-headers), která obsahuje všechny hlavičky
4.17 -# (včetně potřebného Message-ID) původní odeslané zprávy
4.18 -# a) uděláme to tímto milterem
4.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
4.20 -
4.21 -# Tento milter není hotový a pravděpodobně bude lepší řešení b)
4.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)
4.23 -
4.24 -# Instalace tohoto milteru:
4.25 -# aptitude install libsendmail-milter-perl
4.26 -# spustit tento skript → vytvoří unixový socket
4.27 -# v postfixu v main.cf nastavit: smtpd_milters = … unix:/dorucenky/dorucenky.sock
4.28 -
4.29 -# http://search.cpan.org/~cying/Sendmail-Milter-0.18/Milter.pm
4.30 -use Sendmail::Milter;
4.31 -
4.32 -# při jakých akcích bude náš milter volán
4.33 -my %my_milter_callbacks =
4.34 -(
4.35 - 'eoh' => \&my_eoh_callback,
4.36 - 'body' => \&my_body_callback,
4.37 - 'eom' => \&my_eom_callback,
4.38 - 'abort' => \&my_abort_callback,
4.39 -);
4.40 -
4.41 -# konec hlaviček
4.42 -sub my_eoh_callback
4.43 -{
4.44 - my $ctx = shift;
4.45 - # TODO: zkontrolovat
4.46 - # zda se jedná o doručenku
4.47 - # zda už neobsahuje hlavičku References
4.48 - return SMFIS_CONTINUE;
4.49 -}
4.50 -
4.51 -# po každé MIME části
4.52 -sub my_body_callback
4.53 -{
4.54 - my $ctx = shift;
4.55 - # TODO: načíst Message-ID z části s Content-Type: text/rfc822-headers
4.56 - return SMFIS_CONTINUE;
4.57 -}
4.58 -
4.59 -# konec zprávy
4.60 -sub my_eom_callback
4.61 -{
4.62 - my $ctx = shift;
4.63 - # TODO: přidat hlavičku References s Message-ID původně odeslané zprávy
4.64 - $ctx->addheader("X-Perl", "byl jsem tu");
4.65 - $ctx->setpriv(undef);
4.66 - return SMFIS_ACCEPT;
4.67 -}
4.68 -
4.69 -# nečekaný konec spojení
4.70 -sub my_abort_callback
4.71 -{
4.72 - my $ctx = shift;
4.73 - # uklidit po sobě
4.74 - $ctx->setpriv(undef);
4.75 - return SMFIS_CONTINUE;
4.76 -}
4.77 -
4.78 -
4.79 -BEGIN:
4.80 -{
4.81 - # autokonfiguraci nepoužijeme (to je pro Sendmail)
4.82 - # Sendmail::Milter::auto_setconn("myfilter");
4.83 -
4.84 - Sendmail::Milter::setconn("local:/var/spool/postfix/dorucenky/dorucenky.sock");
4.85 - Sendmail::Milter::register("myfilter", \%my_milter_callbacks, SMFI_CURR_ACTS);
4.86 - Sendmail::Milter::main();
4.87 - # Never reaches here, callbacks are called from Milter.
4.88 -}