]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - filters/postal-deliver.pl
sketch for two stage workflow
[git.ikiwiki.info.git] / filters / postal-deliver.pl
1 #!/usr/bin/perl
3 use Email::Filter;
4 use Convert::YText qw(decode_ytext encode_ytext);
6 # we need at least version 2.54 of IkiWiki for the new config api
7 BEGIN { require IkiWiki; die unless ($IkiWiki::version >= 2.54) }
9 use IkiWiki::Setup;
10 use Getopt::Long;
12 my $config_file=undef;
14 GetOptions('config=s'=>\$config_file);
16 die "configuration file is mandatory" unless ($config_file);
18 my %config=IkiWiki::Setup::load($config_file);
20 my $maildir=$config{postal_maildir} || die "maildir not set";
22 my $prefix=$config{postal_prefix} || die "prefix not set";
24 $mail=Email::Filter->new(emergency => $maildir);
26 my $to=$mail->to;
27 if ($to =~ m/$prefix($Convert::YText::valid_rex)/){
28     my $key=decode_ytext($1);
30     $mail->simple->header_set('X-IkiPostal-Key',$key);
32     # need to somehow escape the names. Here we use the fact that YText 
33     # cannot have @ signs.
34     my @path=split(qr{/},$key);
35     map { $_=encode_ytext($_); s/\./@/g } @path;
36     
37     my $mailbox=$maildir . ".".join(".",@path)."/" ;
38     
39     $mail->accept($mailbox);
42 };
45