1.20170906 2017-09-06 Australia/Melbourne

1.20170906 2017-09-06 Australia/Melbourne
 - Ignore the case of tag keys when parsing DMARC records

1.20170222 2017-02-21 America/Los_Angeles

 - Ensure entities in XML agg reports are properly escaped #104
 - geoip v6 support and field selection #103
 - use a larger integer type for report_record.count #102
 - improved apt package lookups in install_deps.pl #98

1.20160612 2016-06-11 America/Los_Angeles

 - fix aggregrate schema test #96
 - Do not reject NXDOMAIN as per rfc #94
 - added none result for no policy #93
 - avoid deadlock with some invalid rua data #92
 - avoid loop when sending reports via http #92

1.20150908 2015-09-08 America/Los_Angeles

 - Optionally log sending of reports to syslog

1.20150527 2015-05-26 America/Los_Angeles

 - check for an updated PSL file and load if necessary
 - handle domains with missing rua/ruf
 - add timeout to sending script

1.20150317 2015-03-17 America/Los_Angeles

 - squash subdomains w/o DMARC records into parent report (#59)
 - add batch reporting (suppress throttling until...)
 - align reports with hour/UTC day
 - swap git contributors plugin

1.20150310 2015-03-10 America/Los_Angeles
 - lower case domain names at entry points (resolves #53)
 - tolerate substitution of = with : in DMARC DNS rec

1.20150228 2015-02-27 America/Los_Angeles

 - fix the policy_evaluated fields in outbound reports
 - accommodate a common DMARC error substiting = with :
 - initialized config file first (was non-deterministic)
 - tolerate missing SPF auth type scope

1.20150222 2015-02-22 America/Los_Angeles

 - remove ./mail-dmarc.ini (sample in share/mail-dmarc.ini)
 - load PSL before dmarc_httpd forks, so we only load it once
 - quieter report sending output unless --verbose

1.20150211 2015-02-10 America/Los_Angeles

 - optionally DKIM sign sent reports
 - warn when DMARC record format is invalid
 - accept callbacks (lazy eval) for SPF & DKIM results
 - make the report record building consistent for eval and reporting
 - rewrite DKIM result invalid -> temperror
 - capture test warnings, so 'make test' is prettier

1.20150123 2015-01-22 America/Los_Angeles

 - enable lazy evaluation of SPF & DKIM (Ricardo Signes)
 - check ShareDir for mail-dmarc.ini, if not in a standard location
 - map DKIM status=invalid to status->temperror
 - add config arg to dmarc_update_public_suffix_list (Ricardo Signes)
 - Send only a single cc email (Marc Bradshaw)
 - DMARC: update docs to show SPF one-shot syntax
 - PurePerl: one shot accepts a Mail::DKIM::Verifier
 - trap errors thrown by is_dkim_aligned
 - INSTALL: added 'install mail-dmarc.ini' step
 - Show "new record" output only in verbose mode. (Marc Bradshaw)
 - require DBIx::Simple 1.35 (was any)

1.20141230 2014-12-29 America/Los_Angeles

 - Add script to update the public suffix list file (Marc Bradshaw)

1.20141206 2014-12-05 America/Los_Angeles

 - Delete reports with no valid rua (Marc Bradshaw)
 - Ignore DomainKeys signatures (Marc Bradshaw)
 - allow configurable delay between sending emails (Marc Bradshaw)
 - permit absolute paths for public suffix list file location (Marc Bradshaw)
 - fix lookup for *.foo entries (Marc Bradshaw)

1.20141119 2014-11-18 America/Los_Angeles

 - added auto_save option for validation reports
 - updated bin/install_deps.pl

1.20141030 2014-10-30 America/Los_Angeles

 - percent policy logic wasn't being applied correctly
 - fix for reasons not stored in SQL

1.20140711 2014-07-10 America/Los_Angeles

 - Store/SQL: use full sql name in WHERE clause
 - DMARC/HTTP: added error handling and tests
 - removed excess comma in mail_dmarc_schema.mysql
 - added quotes around ($commit || ''), just in case
 - try IMAP fetch without SORT if no results, for IMAP servers like Gmail that don't support SORT
 - warn but still pass test if DNS query fails

1.20140623 2014-06-23 America/Los_Angeles

 - updated tests to accomodate the cached PSL

1.20140622 2014-06-22 America/Los_Angeles

 - load PSL into hash to speed subsequent lookups (esp for daemon)
 - uncommented Net::Server in Prereqs/Recommended section
 - added INSTALL
 - updated dmarc_httpd description to note validation feature
 - updated public_suffix_list

1.20140210 2014-02-09 America/Los_Angeles

 - NEW FEATURE: added HTTP validation service (see dmarc_httpd)
 - install_deps: install optional prereqs by default
 - added Best Current Practices link on main page
 - minor tweaks to Pod (Ricardo Signes)
 - PurePerl: added comments about Sender header
    when message has multiple-address format used in the From header
 - updated public_suffix_list

1.20130906 2013-09-06 America/Los_Angeles

 - handle errors encountered when reporting address is illegal
 - delete reports that return a SMTP 5XX code for the recipient
 - delete reports after encountering 12 errors
 - added 'too big' notices when report size exceeds limit
 - updated install_deps.pl

1.20130625 2013-06-24 America/Los_Angeles

 - added a bunch of tests from http://dmarc-qa.com
 - URI: supress undef error if URI scheme not defined
 - policy->parse: properly parse records with unnecessary trailing ;
 - reporting is 'external' based on Org Domain (was email domain)

1.20130616 2013-06-16 America/Los_Angeles

 - combined update/replace SQL methods
 - dmarc_view_reports: fix duplicated variable name

1.20130615 2013-06-15 America/Los_Angeles

 - bug fixes and purge unused classes

1.20130614 2013-06-13 America/Los_Angeles

 - Added whitelist feature
 - SMTP: remove Subject: Report-ID <braces>
 - SMTP: more types of SMTP errors are stored and reported
 - dmarc_send_reports: added verbose option
 - dmarc_view_reports: fix for searches with MySQL backend

1.20130612 2013-06-11

 -  dmarc_view_reports: improve gentoo support by adding /usr
    to search path for GeoIP DBs on gentoo - Benny Pedersen

1.20130610 2013-06-10

 - tolerate receiving reports with no records (ahem, hotmail.com)
 - simplify SMTP flow-of-control, additional SMTP tests
 - avoid the join/split of binip in SQL::populate_agg_records
 - replace carp with warn in several places (more legible warning)
 - added RUA validity checks to dmarc_lookup

1.20130605 2013-06-05

 - in aggregate reports, group by IP and auth results (was only IP)
 - refactored SQL::retrieve_todo into 3 methods, added tests
 - SQL: added unique constraint on domain.domain

1.20130604 2013-06-04

 - main branches are master (devel) and releases (more obvious)
 - added mailing list impact FAQ
 - SQL: removed record.rcpt_dom
 - corrected a XML schema error
 - index.html
    - widened disposition column
    - only show rcpt domain in record (subgrid)
    - corrected subgrid row_id
 - additional validation of aggregate reports

1.20130601 2013-05-31

 - make sure a report record exists when fetching SMTP todo
 - added insecure SMTP fallback if STARTTLS fails
 - added color coded results to HTTP grid

1.20130531 2013-05-30

 - added gzip support to HTTP server, compressed JS files
 - reason is internally an arrayref of hashrefs (was a single hashref)
 - documentation additions
 - removed unused JS files
 - add validation and fixup of SPF result for incoming reports
 - normalized domain columns in spf & dkim tables

1.20130528 2013-05-28

 - bump major version to 1
 - normalized domain columns in report_record
 - fixups to handle reports with invalid formatting
 - improved handling for IMAP SSL connections
 - made internal represention of Mail::DMARC::dkim & spf consistent
   with their aggregate report representation

0.20130528 2013-05-27

 - updated Send/SMTP to use report::aggregate
 - switched back to gzip reports (instead of zip)
 - dmarc_view_reports, added filtering ability, GeoIP location

0.20130524 2013-05-23

 - added bin/dmarc_httpd
 - added bin/dmarc_view_reports
 - renamed: dmarc_report -> dmarc_send_reports

0.20130521 2013-05-21

 - check for report_record existence before insertion
 - SQL: added report_record.count column
 - subclassed aggregreate reports into Report::Aggregate
   - consolidates two agg. rep. generation methods to one
 - SQL: added table report_error
 - updated SQLite schema with native column types

0.20130520 2013-05-19

 - added bin/dmarc_receive (via IMAP, mbox, or message file)
 - added report retrieval via IMAP
 - extract sender domain from subject or MIME metadata
 - SQL: added author.extra_contact
 - SQL: removed 'NOT NULL' requirements for values often missing from incoming
        reports.

0.20130517 2013-05-17

 - send reports with zip until 7/1, gzip after
 - replace Socket 2 with Socket6 (better Windows compatibility)
 - added parsing of incoming email reports
 - added author and domain tables
 - added three related columns from/rcpt/author ids to report table
 - add email hostname to MX list when attempting SMTP delivery
 - during report delivery, check report URI max size

0.20130515 2013-05-15

 - use File::ShareDir to access share/*
 - added external reporting verification

0.20130514 2013-05-14

 - moved DNS settings into config file
 - fixed a case where disposition was not set
 - added bin/dmarc_report
   - sends email reports with Email::MIME & Net::SMTPS
 - deletes reports after successful delivery
 - required Socket 2 (correct IPv6 handling)
 - several SQL schema changes
 - has_valid_reporting_uri does validation now

0.20130510 2013-05-09

0.20130507 2013-05-07

 - added sql and MySQL schema
 - added bin/dmarc_lookup
 - replaced Regexp::Common IP validation with Net::IP (perl 5.8 compat)
 - added Results.pm tests
 - added full section numbers to Draft quotes

0.20130506 2013-05-06

 - added Result and Result/Evaluated.pm
 - consolidated DNS functions into DNS.pm
   - uses Regexp::Common, requiring perl 5.10.
 - Mail::DMARC::Policy is well defined and tested
 - setting up package