Nothing urgent here. Probably can wait for filter documentation. However, I've
been
playing with filters off and on with limited success. It seems like data-line
will
be the most useful to filter on so thats been my focus lately. I have the
following
script:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
open(my $fh, '>', '/tmp/log.txt') or die $!;
# remove line buffering
select(STDOUT);
$|++;
select($fh);
$|++;
print STDOUT "register|filter|smtp-in|data-line\n";
print STDOUT "register|ready\n";
while ( <> ) {
chomp; # get rid of newline
my @report = split /\|/;
next if $report[0] eq 'config';
foreach (@report) {
print $fh "$_\|"; # just to see whats there
}
print $fh "\n";
my $inbody = 0;
my ($sid, $token, $line);
$sid = $report[5];
$token = $report[6];
$line = $report[$#report];
if ($report[0] eq 'filter' and $report[3] eq 'smtp-in' and $report[4]
eq 'data-line') {
die "invalid filter command" if (scalar @report < 7);
if ($line eq '') { print $fh "end of headers\n"; $inbody++; }
if ($line eq '.') { print $fh "end of message\n"; $inbody--; }
print $fh "filter-dataline|$token|$sid|$line\n";
print STDOUT "filter-dataline|$token|$sid|$line\n";
}
}
close $fh;
0;
It prints the following in /tmp/log.txt after a
$ echo "HI" | mail edgar
filter|0|1566239933.835511|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|Received:
from localhost (deathstar.my.domain [local])|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|Received: from localhost
(deathstar.my.domain [local])
filter|0|1566239933.835523|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|
by deathstar.my.domain (OpenSMTPD) with ESMTPA id 7052ea5a|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d| by deathstar.my.domain
(OpenSMTPD) with ESMTPA id 7052ea5a
filter|0|1566239933.835529|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|
for <[email protected]>;|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d| for
<[email protected]>;
filter|0|1566239933.835533|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|
Mon, 19 Aug 2019 13:38:53 -0500 (CDT)|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d| Mon, 19 Aug 2019
13:38:53 -0500 (CDT)
filter|0|1566239933.836673|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|From:
Edgar Pettijohn <[email protected]>|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|From: Edgar Pettijohn
<[email protected]>
filter|0|1566239933.836681|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|Date:
Mon, 19 Aug 2019 13:38:53 -0500 (CDT)|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|Date: Mon, 19 Aug 2019
13:38:53 -0500 (CDT)
filter|0|1566239933.836685|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|To:
edgar|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|To: edgar
filter|0|1566239933.836688|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|ef8747a12860387a
filter|0|1566239933.836692|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|HI|
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|HI
filter|0|1566239933.836695|smtp-in|data-line|c0002b41f6bd164d|ef8747a12860387a|.|
end of message
filter-dataline|ef8747a12860387a|c0002b41f6bd164d|.
I get the following response:
deathstar$ sendmail: command failed: 550 5.7.1 Delivery not authorized, message
refused: Message is not RFC 2822 compliant
I see the same from a telnet session as well.
So there are 2 problems. First my script doesn't appear to acurately determine
that the headers are finished. Second mail
doesn't go through. Any suggestions are appreciated.
Thanks,
Edgar