| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
1
|
|
|
1
|
|
8975
|
use strict; |
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
68
|
|
|
2
|
|
|
|
|
|
|
package Email::LocalDelivery::Ezmlm; |
|
3
|
|
|
|
|
|
|
our $VERSION = '0.10'; |
|
4
|
1
|
|
|
1
|
|
6
|
use File::Path qw(mkpath); |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
103
|
|
|
5
|
1
|
|
|
1
|
|
16
|
use File::Basename qw( dirname ); |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
568
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
=head1 NAME |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
Email::LocalDelivery::Ezmlm - deliver mail into ezmlm archives |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
use Email::LocalDelivery; |
|
14
|
|
|
|
|
|
|
Email::LocalDelivery->deliver($mail, "/some/box//") or die "couldn't deliver"; |
|
15
|
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
This module delivers RFC822 messages into ezmlm-style archive folders. |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
This module was created to allow easy interoperability between |
|
21
|
|
|
|
|
|
|
L and L. Colobus is an nntp server which uses ezmlm |
|
22
|
|
|
|
|
|
|
archives as its message store. |
|
23
|
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
=head1 METHODS |
|
25
|
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
=head2 ->deliver( $message, @folders ) |
|
27
|
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
used as a class method. returns the names of the files ultimately |
|
29
|
|
|
|
|
|
|
delivered to |
|
30
|
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
=cut |
|
32
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
sub deliver { |
|
34
|
1
|
|
|
1
|
1
|
18
|
my ($class, $mail, @folders) = @_; |
|
35
|
|
|
|
|
|
|
|
|
36
|
1
|
|
|
|
|
1
|
my @delivered; |
|
37
|
1
|
|
|
|
|
3
|
for my $folder (@folders) { |
|
38
|
|
|
|
|
|
|
# trim the identifier off, as mkpath doesn't get on with it |
|
39
|
1
|
|
|
|
|
7
|
$folder =~ s{//?$}{}; |
|
40
|
|
|
|
|
|
|
# XXX should lock the folder - figure out how ezmlm does that |
|
41
|
|
|
|
|
|
|
|
|
42
|
1
|
|
|
|
|
2
|
my $num; |
|
43
|
1
|
50
|
|
|
|
51
|
if (open my $fh, "$folder/num") { |
|
44
|
1
|
|
|
|
|
16
|
($num) = (<$fh> =~ m/^(\d+)/); |
|
45
|
|
|
|
|
|
|
} |
|
46
|
1
|
|
|
|
|
4
|
++$num; |
|
47
|
|
|
|
|
|
|
|
|
48
|
1
|
|
|
|
|
12
|
my $filename = sprintf('%s/archive/%d/%02d', |
|
49
|
|
|
|
|
|
|
$folder, int $num / 100, $num % 100); |
|
50
|
1
|
|
|
|
|
2
|
eval { mkpath( dirname $filename ) }; |
|
|
1
|
|
|
|
|
111
|
|
|
51
|
1
|
50
|
|
|
|
137
|
open my $fh, ">$filename" or next; |
|
52
|
1
|
|
|
|
|
20
|
print $fh $mail; |
|
53
|
1
|
50
|
|
|
|
67
|
close $fh or next; |
|
54
|
|
|
|
|
|
|
|
|
55
|
1
|
50
|
|
|
|
101
|
open $fh, ">$folder/num" or do { unlink $filename; next }; |
|
|
0
|
|
|
|
|
0
|
|
|
|
0
|
|
|
|
|
0
|
|
|
56
|
1
|
|
|
|
|
5
|
print $fh "$num\n"; |
|
57
|
1
|
50
|
|
|
|
37
|
close $fh or die "couldn't rewrite '$folder/num' $!"; |
|
58
|
1
|
|
|
|
|
17
|
push @delivered, $filename; |
|
59
|
|
|
|
|
|
|
} |
|
60
|
1
|
|
|
|
|
6
|
return @delivered; |
|
61
|
|
|
|
|
|
|
} |
|
62
|
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
1; |
|
64
|
|
|
|
|
|
|
__END__ |