[Mimedefang] Help with header checking

Andrea Venturoli ml at netfence.it
Wed Nov 25 05:45:11 EST 2020


I'm a long time MIMEDefang user, but my PERL knowledge is about zero.

A long time ago I found some sample code (from a site which does not 
even exist anymore) and managed to adapt it to my situation.

Here it is:
>         if (open(HF, "<./HEADERS")) {
>             my $head = Mail::Header->new([<HF>]);
>             close HF;
>             md_syslog('warning',"head = %$head");
>             if ($head) {
>                 my @recheads = Mail::Field->extract('Received',$head);
>                 md_syslog('warning',"RecHeads = %@recheads");
>                 foreach my $rechead (@recheads) {
> ...
>                 }
>             }
>         }

The purpose is to extract Received fields, so to reconstruct the path a 
message underwent from server to server.
It has worked 99.99% of the times for years; lately, however it fails on 
some very frequent spam messages and I have a hard time understanding why.

So, I'm asking for help from someone who knows PERL.

Are Mail::Header and Mail::Field still current? Or are they obsolete? If 
so, what should be used as a replacement?

For these messages, I see in the logs:
> mimedefang.pl[23042]: 0AP2jef2000844: head = %Mail::Header=HASH(0x1fe80ae0)
> mimedefang.pl[23042]: 0AP2jef2000844: RecHeads = %

So it seems Mail::Header parsed the message, but either found no 
Received header (and they are there!) or it's Mail::Field that fails.
How would I log more data to know what's going on?

I tried adding:
>             foreach $key (keys %$head)
>             {
>                 md_syslog('warning',"$key is $head{$key}");
>             }
Alas, only the keys are printed, not the values.

Any hint?

  bye & Thanks

P.S. I'm using PERL 5.32.0.

More information about the MIMEDefang mailing list