—#!/usr/bin/perl
use
strict;
use
warnings;
use
Data::Dumper;
use
Getopt::Long;
use
Pod::Usage;
$|++;
my
%command_line_options
= (
'file:s'
=> \
my
$file
,
'imap'
=> \
my
$imap
,
'mbox'
=> \
my
$mbox
,
'verbose+'
=> \
my
$verbose
,
);
GetOptions (
%command_line_options
);
pod2usage(0)
if
!
$imap
&& !
$mbox
&& !
$file
;
## no critic (Carp)
my
$recv
= Mail::DMARC::Report::Receive->new() or
die
;
$recv
->verbose(
$verbose
)
if
$verbose
;
$recv
->from_imap
if
$imap
;
$recv
->from_mbox(
$mbox
)
if
$mbox
;
$recv
->from_file(
$file
)
if
$file
;
exit
;
__END__
=head1 NAME
dmarc_receive: receive aggregate reports via IMAP, mbox, or message file(s)
=head1 USAGE
dmarc_receive [ --imap | --mbox | --file ]
=head1 DESCRIPTION
This script processes incoming DMARC reports from IMAP, files, or a mbox formatted file.
=head2 IMAP
To process reports with IMAP, you must configure the [imap] settings in mail-dmarc.ini. This program will:
* log into the IMAP account
* select the specified folder (INBOX, dmarc, etc)
* for every unread (Unseen) message, search for DMARC reports
=head3 IMAP Aggregate report
IMAP aggregate reports are detected by the presence of zip or gzip attachments. When an aggregate report is detected:
* the attachment is decompressed
* the XML is parsed
* the report is saved to the report store
* the message is marked as read/seen
* move message to [imap][a_done] folder (if defined)
=head3 IMAP Forensic report
IMAP forensic reports are detected by the presence of the content-types message/feedback-report and text/rfc822-headers. When a forensic report is detected it is moved to the [imap][f_done] IMAP folder.
=head2 File as message
Accepts the filename of a file containing a mail message. The message is parsed and stored.
=head2 Mbox
Accepts the filename of a mbox format file containing mail messages. The messages are parsed and stored.
=cut