More Hacking amavisd $msginfo

Alex <[email protected]>
Newsgroups gmane.mail.virus.amavis.user
Message-ID <CAB1R3sgcjmKOw1h39y81ZT05PVyhy93ry4v3EXs8+XZ0EW07NQ@mail.gmail.com>
Hi,

I'm trying to find or develop a way to quarantine mail from specific
senders for specific domains. Is there a well-defined way to do this?
It appears the amavisd.conf doesn't provide the ability to specify
different policies based on domains.

So eleven years ago(!!!) I posted this somewhat related question:
https://lists.amavis.org/pipermail/amavis-users/2011-June/000503.html

Is it possible to use the $msginfo structure to inspect the different
headers and somehow make a policy decision on whether to quarantine an
email there? In other words, if I built a custom hook using the
$msginfo structure, and found one of the senders I wished to block,
based on the recipient domain, could I quarantine it from there?

I don't have an answer for what to do if a sender is on the blocklist
for one domain and not on another. I hoped it could be decided in a
per-recipient basis.

Here's (most) of the contents of my custom.conf.
package Amavis::Custom;
use strict;
use warnings;
#use diagnostics;
no warnings qw(uninitialized redefine);

# needed for write_to_db()
use DB_File;
use IO::File;
use DBI qw(:sql_types);
use DBD::mysql;
BEGIN {
  import Amavis::Conf qw(:platform :confvars c cr ca $myhostname);
  import Amavis::Util qw(do_log untaint safe_encode safe_decode);
  import Amavis::rfc2821_2822_Tools;
  import Amavis::Notify qw(build_mime_entity);
}

sub new {
  my($class,$conn,$msginfo) = @_;
  my($self) = bless {}, $class;
  my($mail_size) = $msginfo->msg_size;   # mail size in bytes
  my($mail_size_mb) = $mail_size/(1024*1024);
  my($hdr_edits) = $msginfo->header_edits;
  $hdr_edits->add_header('X-ActualMessageSizeBytes', $mail_size);
  $hdr_edits->add_header('X-ActualMessageSize',
                         '*' x ($mail_size_mb > 50 ? 50 : $mail_size_mb));

  $self;  # returning an object activates further callbacks,
          # returning undef disables them
}

sub before_send {
  my($self,$conn,$msginfo) = @_;

  my($loc_subj)         = $msginfo->get_header_field_body('subject');
  my($loc_from)         = $msginfo->get_header_field_body('from');  #
raw full field
  my($loc_recip)        = $msginfo->get_header_field_body('recip_addr_smtp');
  my($loc_recip_final)  = $msginfo->get_header_field_body('rfc2822_sender');
  my($loc_to)           = $msginfo->get_header_field_body('to');  #
raw full field
  my($loc_sender)       = $msginfo->sender;  # envelope sender
address, e.g. '[email protected]'

  ...
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.