From caac8e68f0640d8b9105146c40d75f7910c42078 Mon Sep 17 00:00:00 2001 From: Sean Whalen <44679+seanthegeek@users.noreply.github.com> Date: Thu, 21 May 2026 13:41:16 -0400 Subject: [PATCH] docs: note DMARC RFC support in the features list (#778) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: note DMARC RFC support in the features list The features list only mentioned "draft and 1.0" aggregate reports. Spell out the standards parsedmarc parses: RFC 7489 (legacy DMARC) and the final DMARC standard RFC 9989 with RFC 9990 aggregate reports, RFC 6591 and RFC 9991 failure reports, and RFC 8460 SMTP TLS reports. Co-Authored-By: Claude Opus 4.7 (1M context) * docs: align Python compatibility table pipes (MD060) The emoji cells were padded for display width, leaving the source pipes misaligned by character count and tripping markdownlint MD060. Re-pad so every row's pipes line up by codepoint. Co-Authored-By: Claude Opus 4.7 (1M context) * docs: list all optional output destinations; fix table emoji alignment Expand the features list to cover every output sink: Elasticsearch, OpenSearch, Splunk, and PostgreSQL (premade dashboards), plus Kafka, Amazon S3, Azure Log Analytics (Microsoft Sentinel), Graylog (GELF), syslog, and HTTP webhooks. Also re-pad the Python compatibility table using display width (the status emoji render two columns wide), which is what markdownlint MD060 measures — the previous codepoint-based padding still tripped the rule. Co-Authored-By: Claude Opus 4.7 (1M context) * docs: separate PostgreSQL from the premade-dashboards clause PostgreSQL is a storage target without bundled premade dashboards, so it shouldn't sit inside the "for use with premade dashboards" phrase next to Elasticsearch/OpenSearch/Splunk. Co-Authored-By: Claude Opus 4.7 (1M context) * docs: move PostgreSQL to the non-dashboard outputs line Co-Authored-By: Claude Opus 4.7 (1M context) * docs: use compact markdown tables Switch the markdown tables (Python compatibility, env-var section mapping) to compact single-space format. It reads cleanly in a text editor and sidesteps the column-alignment churn that emoji/variable-width content caused with padded tables (markdownlint MD060). The reStructuredText grid table in dmarc.md is left as-is — it relies on multi-line cells markdown can't express. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) --- README.md | 41 +++++++++++++++++++++++------------------ docs/source/index.md | 41 +++++++++++++++++++++++------------------ docs/source/usage.md | 36 ++++++++++++++++++------------------ 3 files changed, 64 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 0f59d95..a1ca67e 100644 --- a/README.md +++ b/README.md @@ -28,32 +28,37 @@ Please consider [sponsoring my work](https://github.com/sponsors/seanthegeek) if ## Features -- Parses draft and 1.0 standard aggregate/rua DMARC reports -- Parses failure/ruf DMARC reports (formerly called forensic reports) -- Parses reports from SMTP TLS Reporting +- Parses aggregate/rua DMARC reports: the legacy draft and 1.0 schemas + (RFC 7489) and the new RFC 9990 schema for the final DMARC standard + (RFC 9989) +- Parses failure/ruf DMARC reports (RFC 6591 and RFC 9991; formerly called + forensic reports) +- Parses reports from SMTP TLS Reporting (TLS-RPT, RFC 8460) - Can parse reports from an inbox over IMAP, Microsoft Graph, or Gmail API - Transparently handles gzip or zip compressed reports - Consistent data structures - Simple JSON and/or CSV output - Optionally email the results -- Optionally send the results to Elasticsearch, Opensearch, and/or Splunk, for - use with premade dashboards -- Optionally send reports to Apache Kafka +- Optionally send the results to Elasticsearch, OpenSearch, or Splunk, for use + with premade dashboards +- Optionally send the results to PostgreSQL, Apache Kafka, Amazon S3, Azure Log + Analytics (Microsoft Sentinel), a Graylog (GELF) endpoint, a syslog server, + or an HTTP webhook ## Python Compatibility This project supports the following Python versions, which are either actively maintained or are the default versions for RHEL or Debian. -| Version | Supported | Reason | -|---------|-----------|------------------------------------------------------------| -| < 3.6 | ❌ | End of Life (EOL) | -| 3.6 | ❌ | Used in RHEL 8, but not supported by project dependencies | -| 3.7 | ❌ | End of Life (EOL) | -| 3.8 | ❌ | End of Life (EOL) | -| 3.9 | ❌ | Used in Debian 11 and RHEL 9, but not supported by project dependencies | -| 3.10 | ✅ | Actively maintained | -| 3.11 | ✅ | Actively maintained; supported until June 2028 (Debian 12) | -| 3.12 | ✅ | Actively maintained; supported until May 2035 (RHEL 10) | -| 3.13 | ✅ | Actively maintained; supported until June 2030 (Debian 13) | -| 3.14 | ✅ | Supported (requires `imapclient>=3.1.0`) | +| Version | Supported | Reason | +| --- | --- | --- | +| < 3.6 | ❌ | End of Life (EOL) | +| 3.6 | ❌ | Used in RHEL 8, but not supported by project dependencies | +| 3.7 | ❌ | End of Life (EOL) | +| 3.8 | ❌ | End of Life (EOL) | +| 3.9 | ❌ | Used in Debian 11 and RHEL 9, but not supported by project dependencies | +| 3.10 | ✅ | Actively maintained | +| 3.11 | ✅ | Actively maintained; supported until June 2028 (Debian 12) | +| 3.12 | ✅ | Actively maintained; supported until May 2035 (RHEL 10) | +| 3.13 | ✅ | Actively maintained; supported until June 2030 (Debian 13) | +| 3.14 | ✅ | Supported (requires `imapclient>=3.1.0`) | diff --git a/docs/source/index.md b/docs/source/index.md index 540439d..defc10b 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -29,35 +29,40 @@ and Valimail. ## Features -- Parses draft and 1.0 standard aggregate/rua DMARC reports -- Parses failure/ruf DMARC reports -- Parses reports from SMTP TLS Reporting +- Parses aggregate/rua DMARC reports: the legacy draft and 1.0 schemas + (RFC 7489) and the new RFC 9990 schema for the final DMARC standard + (RFC 9989) +- Parses failure/ruf DMARC reports (RFC 6591 and RFC 9991; formerly called + forensic reports) +- Parses reports from SMTP TLS Reporting (TLS-RPT, RFC 8460) - Can parse reports from an inbox over IMAP, Microsoft Graph, or Gmail API - Transparently handles gzip or zip compressed reports - Consistent data structures - Simple JSON and/or CSV output - Optionally email the results -- Optionally send the results to Elasticsearch, Opensearch, and/or Splunk, for use - with premade dashboards -- Optionally send reports to Apache Kafka +- Optionally send the results to Elasticsearch, OpenSearch, or Splunk, for use + with premade dashboards +- Optionally send the results to PostgreSQL, Apache Kafka, Amazon S3, Azure Log + Analytics (Microsoft Sentinel), a Graylog (GELF) endpoint, a syslog server, + or an HTTP webhook ## Python Compatibility This project supports the following Python versions, which are either actively maintained or are the default versions for RHEL or Debian. -| Version | Supported | Reason | -|---------|-----------|------------------------------------------------------------| -| < 3.6 | ❌ | End of Life (EOL) | -| 3.6 | ❌ | Used in RHEL 8, but not supported by project dependencies | -| 3.7 | ❌ | End of Life (EOL) | -| 3.8 | ❌ | End of Life (EOL) | -| 3.9 | ❌ | Used in Debian 11 and RHEL 9, but not supported by project dependencies | -| 3.10 | ✅ | Actively maintained | -| 3.11 | ✅ | Actively maintained; supported until June 2028 (Debian 12) | -| 3.12 | ✅ | Actively maintained; supported until May 2035 (RHEL 10) | -| 3.13 | ✅ | Actively maintained; supported until June 2030 (Debian 13) | -| 3.14 | ✅ | Supported (requires `imapclient>=3.1.0`) | +| Version | Supported | Reason | +| --- | --- | --- | +| < 3.6 | ❌ | End of Life (EOL) | +| 3.6 | ❌ | Used in RHEL 8, but not supported by project dependencies | +| 3.7 | ❌ | End of Life (EOL) | +| 3.8 | ❌ | End of Life (EOL) | +| 3.9 | ❌ | Used in Debian 11 and RHEL 9, but not supported by project dependencies | +| 3.10 | ✅ | Actively maintained | +| 3.11 | ✅ | Actively maintained; supported until June 2028 (Debian 12) | +| 3.12 | ✅ | Actively maintained; supported until May 2035 (RHEL 10) | +| 3.13 | ✅ | Actively maintained; supported until June 2030 (Debian 13) | +| 3.14 | ✅ | Supported (requires `imapclient>=3.1.0`) | ```{toctree} :caption: 'Contents' diff --git a/docs/source/usage.md b/docs/source/usage.md index fb05060..9c39358 100644 --- a/docs/source/usage.md +++ b/docs/source/usage.md @@ -714,24 +714,24 @@ then read and stored as the `credentials_file` value. For sections with underscores in the name, the full section name is used: -| Section | Env var prefix | -|------------------|-------------------------------| -| `general` | `PARSEDMARC_GENERAL_` | -| `mailbox` | `PARSEDMARC_MAILBOX_` | -| `imap` | `PARSEDMARC_IMAP_` | -| `msgraph` | `PARSEDMARC_MSGRAPH_` | -| `elasticsearch` | `PARSEDMARC_ELASTICSEARCH_` | -| `opensearch` | `PARSEDMARC_OPENSEARCH_` | -| `splunk_hec` | `PARSEDMARC_SPLUNK_HEC_` | -| `kafka` | `PARSEDMARC_KAFKA_` | -| `smtp` | `PARSEDMARC_SMTP_` | -| `s3` | `PARSEDMARC_S3_` | -| `syslog` | `PARSEDMARC_SYSLOG_` | -| `gmail_api` | `PARSEDMARC_GMAIL_API_` | -| `maildir` | `PARSEDMARC_MAILDIR_` | -| `log_analytics` | `PARSEDMARC_LOG_ANALYTICS_` | -| `gelf` | `PARSEDMARC_GELF_` | -| `webhook` | `PARSEDMARC_WEBHOOK_` | +| Section | Env var prefix | +| --- | --- | +| `general` | `PARSEDMARC_GENERAL_` | +| `mailbox` | `PARSEDMARC_MAILBOX_` | +| `imap` | `PARSEDMARC_IMAP_` | +| `msgraph` | `PARSEDMARC_MSGRAPH_` | +| `elasticsearch` | `PARSEDMARC_ELASTICSEARCH_` | +| `opensearch` | `PARSEDMARC_OPENSEARCH_` | +| `splunk_hec` | `PARSEDMARC_SPLUNK_HEC_` | +| `kafka` | `PARSEDMARC_KAFKA_` | +| `smtp` | `PARSEDMARC_SMTP_` | +| `s3` | `PARSEDMARC_S3_` | +| `syslog` | `PARSEDMARC_SYSLOG_` | +| `gmail_api` | `PARSEDMARC_GMAIL_API_` | +| `maildir` | `PARSEDMARC_MAILDIR_` | +| `log_analytics` | `PARSEDMARC_LOG_ANALYTICS_` | +| `gelf` | `PARSEDMARC_GELF_` | +| `webhook` | `PARSEDMARC_WEBHOOK_` | ## Performance tuning