I realized that there was no way to know where we try to deliver our email in the triggers called by Email::Filter.
The attached patch fixes that, allowing niceties like:
,----
| sub add_prefix {
| my ($self, $boxes) = @_;
| for my box (@$boxes) {
| if ($box !~ /^$box_prefix/) {
| $box = $box_prefix . $dir;
| }
| }
| }
|
| Email::Filter->add_trigger(before_accept => \&add_prefix);
`----
I am sure you can think of other uses.
Cheers,
Stefan Kangas
pgpTUJrYWbbza.pgp
Description: PGP signature
diff -Naur Email-Filter-1.032/lib/Email/Filter.pm Email-Filter-1.032-skangas//lib/Email/Filter.pm
--- Email-Filter-1.032/lib/Email/Filter.pm 2008-09-15 05:26:26.000000000 +0200
+++ Email-Filter-1.032-skangas//lib/Email/Filter.pm 2011-01-31 03:19:20.000000000 +0100
@@ -266,11 +266,11 @@
sub accept {
my ($self, @boxes) = @_;
- $self->call_trigger("before_accept");
+ $self->call_trigger("before_accept", \@boxes);
# Unparsing and reparsing is so fast we prefer to do that in order
# to keep to LocalDelivery's clean interface.
if (Email::LocalDelivery->deliver($self->simple->as_string, @boxes)) {
- $self->call_trigger("after_accept");
+ $self->call_trigger("after_accept", \@boxes);
$self->done_ok;
} else {
$self->fail_gracefully();
@@ -322,7 +322,7 @@
my ($self, @program) = @_;
my $stdout;
my $string = $self->simple->as_string;
- $self->call_trigger("pipe");
+ $self->call_trigger("pipe", \@program);
if (eval {run(\@program, \$string, \$stdout)} ) {
$self->done_ok;
return $stdout;
