diff options
author | TechSneeze <dave@techsneeze.com> | 2019-08-09 02:07:10 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-09 02:07:10 +0300 |
commit | bb5dd8b6f84ab6ee04b2e7f9d3bba07165735eea (patch) | |
tree | 82656139822e8333f33d8143119b64221e357b78 | |
parent | 9e960124eb5d4127f8db01d1c9aa59e711adea10 (diff) | |
parent | 96f28fb85a0dceb44449c79dc0038115b254dbbd (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.sample | 4 | ||||
-rwxr-xr-x | dmarcts-report-parser.pl | 58 |
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) = (@_); |