Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/techsneeze/dmarcts-report-parser.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTechSneeze <dave@techsneeze.com>2019-08-09 02:07:10 +0300
committerGitHub <noreply@github.com>2019-08-09 02:07:10 +0300
commitbb5dd8b6f84ab6ee04b2e7f9d3bba07165735eea (patch)
tree82656139822e8333f33d8143119b64221e357b78
parent9e960124eb5d4127f8db01d1c9aa59e711adea10 (diff)
parent96f28fb85a0dceb44449c79dc0038115b254dbbd (diff)
Merge pull request #66 from fenugeek/master
Move failed dmarc msgs to a different IMAP folder than the successfully processed ones
-rw-r--r--dmarcts-report-parser.conf.sample4
-rwxr-xr-xdmarcts-report-parser.pl58
2 files changed, 42 insertions, 20 deletions
diff --git a/dmarcts-report-parser.conf.sample b/dmarcts-report-parser.conf.sample
index 2ed7caf..45e2e4c 100644
--- a/dmarcts-report-parser.conf.sample
+++ b/dmarcts-report-parser.conf.sample
@@ -31,6 +31,10 @@ $imapreadfolder = 'dmarc';
# the --delete option!)
$imapmovefolder = 'dmarc/processed';
+# If $imapmovefoldererr is set, IMAP messages that fail will be moved. If unset, failed messages
+# will move to $imapmovefolder (if it is set). Overruled by the --delete option!
+$imapmovefoldererr = 'Inbox.notProcessed';
+
# maximum size of XML files to store in database, long files can cause transaction aborts
$maxsize_xml = 50000;
# store XML as base64 encopded gzip in database (save space, harder usable)
diff --git a/dmarcts-report-parser.pl b/dmarcts-report-parser.pl
index c58618e..410a196 100755
--- a/dmarcts-report-parser.pl
+++ b/dmarcts-report-parser.pl
@@ -118,7 +118,8 @@ sub show_usage {
# Define all possible configuration options.
our ($debug, $delete_reports, $delete_failed, $reports_replace, $maxsize_xml, $compress_xml,
$dbname, $dbuser, $dbpass, $dbhost, $dbport,
- $imapserver, $imapport, $imapuser, $imappass, $imapignoreerror, $imapssl, $imaptls, $imapmovefolder, $imapreadfolder, $imapopt, $tlsverify, $processInfo);
+ $imapserver, $imapport, $imapuser, $imappass, $imapignoreerror, $imapssl, $imaptls, $imapmovefolder,
+ $imapmovefoldererr, $imapreadfolder, $imapopt, $tlsverify, $processInfo);
# defaults
$maxsize_xml = 50000;
@@ -296,26 +297,16 @@ if ($reports_source == TS_IMAP) {
$imap->delete_message($msg)
or print "Could not delete IMAP message. [$@]\n";
} elsif ($imapmovefolder) {
- print "Moving (copy and delete) processed IMAP message file to IMAP folder: $imapmovefolder\n" if $debug;
-
- # Try to create $imapmovefolder, if it does not exist.
- if (!$imap->exists($imapmovefolder)) {
- $imap->create($imapmovefolder)
- or print "Could not create IMAP folder: $imapmovefolder.\n";
- }
-
- # Try to move the message to $imapmovefolder.
- my $newid = $imap->copy($imapmovefolder, [ $msg ]);
- if (!$newid) {
- print "Error on moving (copy and delete) processed IMAP message: Could not COPY message to IMAP folder: <$imapmovefolder>!\n";
- print "Messsage will not be moved/deleted. [$@]\n";
- } else {
- $imap->delete_message($msg)
- or do {
- print "Error on moving (copy and delete) processed IMAP message: Could not DELETE message\n";
- print "after copying it to <$imapmovefolder>. [$@]\n";
- }
+ if ($processResult & 1 || !$imapmovefoldererr) {
+ # processXML processed the XML OK, or it failed and there is no error imap folder
+ moveToImapFolder($imap, $msg, $imapmovefolder);
+ } elsif ($imapmovefoldererr) {
+ # processXML failed and error folder set
+ moveToImapFolder($imap, $msg, $imapmovefoldererr);
}
+ } elsif ($imapmovefoldererr && !($processResult & 1)) {
+ # processXML failed, error imap folder set, but imapmovefolder unset. An unlikely setup, but still...
+ moveToImapFolder($imap, $msg, $imapmovefoldererr);
}
}
@@ -406,6 +397,33 @@ if ($reports_source == TS_IMAP) {
### subroutines ################################################################
################################################################################
+sub moveToImapFolder {
+ my $imap = $_[0];
+ my $msg = $_[1];
+ my $imapfolder = $_[2];
+
+ print "Moving (copy and delete) IMAP message file to IMAP folder: $imapfolder\n" if $debug;
+
+ # Try to create $imapfolder, if it does not exist.
+ if (!$imap->exists($imapfolder)) {
+ $imap->create($imapfolder)
+ or print "Could not create IMAP folder: $imapfolder.\n";
+ }
+
+ # Try to move the message to $imapfolder.
+ my $newid = $imap->copy($imapfolder, [ $msg ]);
+ if (!$newid) {
+ print "Error on moving (copy and delete) processed IMAP message: Could not COPY message to IMAP folder: <$imapfolder>!\n";
+ print "Messsage will not be moved/deleted. [$@]\n";
+ } else {
+ $imap->delete_message($msg)
+ or do {
+ print "Error on moving (copy and delete) processed IMAP message: Could not DELETE message\n";
+ print "after copying it to <$imapfolder>. [$@]\n";
+ }
+ }
+}
+
sub processXML {
my ($type, $filecontent, $f) = (@_);