Skip to main content

MailRadar 📡

Know your email security posture — before attackers do.

Python License: MIT PyPI Docker GDPR Art. 32

MailRadar is an open-source CLI tool that audits the email security posture of any domain — checking DMARC, SPF, DKIM, BIMI, VMC and GPG key availability — and generates ready-to-send reports for domain owners.


Why MailRadar?

Email authentication is a critical but often overlooked layer of security. A domain without proper DMARC, SPF and DKIM configuration can be spoofed — allowing attackers to impersonate organizations, DPOs, legal contacts or public entities.

Under GDPR Article 32, data controllers are required to implement appropriate technical measures to ensure security. A missing or misconfigured DMARC policy is a measurable, documentable gap.

MailRadar makes that gap visible — and actionable.


Features

  • ✅ DMARC — policy level (none/quarantine/reject), alignment, reporting
  • ✅ SPF — record presence, permissiveness (-all vs ~all vs +all)
  • ✅ DKIM — selector detection, key length verification (via cryptography library)
  • ✅ BIMI — record presence and SVG logo validation
  • ✅ VMC — Verified Mark Certificate detection
  • ✅ MTA-STS — policy presence and mode
  • ✅ TLS-RPT — TLS reporting configuration
  • ✅ GPG — public key lookup on keyservers (keys.openpgp.org, keyserver.ubuntu.com)
  • ✅ Security contact — security@ / postmaster@ / dpo@ detection
  • 📊 Scoring — 0-100 security score with severity levels
  • 📧 Report generation — ready-to-send email template with current vs recommended configuration
  • 🔐 GPG-encrypted delivery — if target has a public key, report is encrypted before sending
  • 📄 PDF export — formal audit report for GDPR Art. 32 documentation

Real-world examples

$ mailradar check maksimtech.com

Domain: maksimtech.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✅ DMARC    p=reject | pct=100 | adkim=s | aspf=s | rua ✓ | ruf ✓
✅ SPF      v=spf1 include:spf.infomaniak.ch -all
✅ DKIM     selector: 20250324 | RSA 2048-bit
❌ BIMI     not configured
❌ MTA-STS  not configured
❌ TLS-RPT  not configured

Score: 85/100 — 🟢 GOOD
$ mailradar check [external-dpo-firm.tld]

Domain: [external-dpo-firm.tld]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

⚠️  DMARC    p=quarantine | pct=100 | adkim=s | aspf=s | rua ✓ | ruf ✓
✅ SPF      -all (configured)
⚠️  DKIM     selector: selector1 | RSA 1024-bit
⚠️  BIMI     present but SVG error (HTTP 301) | no VMC
❌ MTA-STS  not configured
❌ TLS-RPT  not configured

Score: 68/100 — 🟡 MODERATE

Issues found:
  • DMARC policy is quarantine — upgrade to reject
  • DKIM key is 1024-bit — upgrade to 2048-bit recommended
  • BIMI SVG not accessible
  • BIMI present but no VMC — logo not verified by CA
  • No MTA-STS configured
  • No TLS-RPT configured

The second example is a real external DPO firm handling GDPR compliance for major organizations — tested with MailRadar on its first run.


Installation

# Via pip
pip install mailradar

# Via Docker
docker pull maksimtech/mailradar
docker run --rm maksimtech/mailradar check example.com

# From source
git clone https://github.com/maksimtech/mailradar
cd mailradar
pip install -e .

Usage

# Basic check
mailradar check example.com

# Verbose — show raw DNS records
mailradar check example.com --verbose

# Check multiple domains from file
mailradar batch domains.txt

# Generate PDF for GDPR Art. 32 documentation
mailradar check example.com --report --format pdf

# Check and send report to domain owner
mailradar check example.com --send --from security@yourdomain.com

Scoring

Score Level Description
90-100 🟢 EXCELLENT Full implementation including BIMI+VMC
75-89 🟢 GOOD DMARC p=reject, SPF -all, DKIM 2048-bit
50-74 🟡 MODERATE DMARC present but not at reject level
25-49 🟠 POOR Partial or misconfigured authentication
0-24 🔴 CRITICAL No meaningful email authentication

GDPR Relevance

MailRadar is particularly relevant for:

  • DPOs auditing the email security posture of data controllers they assist
  • IT managers documenting technical measures under GDPR Art. 32
  • Security researchers identifying spoofable domains of public entities
  • Compliance teams generating evidence for audit trails

A domain with p=none DMARC handling sensitive personal data communications is a documentable Art. 32 gap.


Report Template

MailRadar generates localized email reports (IT/EN) with:

  • Current configuration (actual DNS records)
  • Recommended configuration (copy-paste ready DNS records)
  • Provider-specific guidance (Infomaniak, Google Workspace, Microsoft 365, Proton)
  • GPG-encrypted delivery if target public key is available on keyservers

  • PatchRadar — CVE monitoring for self-hosted software stacks

Built with


Contributing

Contributions welcome. Open an issue or PR on GitHub.


License

MIT — see LICENSE


Built by maksimtech — also maintaining PatchRadar

Release files for mailradar 2026.9.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mailradar 2026.9.6
File Size Uploaded
mailradar-2026.9.6.tar.gz 71.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mailradar 2026.9.6
File Interpreter ABI Platform
mailradar-2026.9.6-py3-none-any.whl Python 3 none any Details

Total release size: 96.0 kB

Release files / mailradar-2026.9.6.tar.gz

Download URL mailradar-2026.9.6.tar.gz
Size 71.9 kB
Tags Source
SHA-256 checksum
How to use checksums
52011e7c89851995204bf6bdf0332d111b9573f50d722421cfc8d539a2cee5ba
BLAKE2b-256 checksum
How to use checksums
a8f0c985dc8daaeae8bdffafdc5852046860510a938992a2774ad894684e0efd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release files / mailradar-2026.9.6-py3-none-any.whl

Download URL mailradar-2026.9.6-py3-none-any.whl
Size 24.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e32779265efacefa4979f2ad6277b158bbdbeefa13561b31e0f801cd47ef177c
BLAKE2b-256 checksum
How to use checksums
be19c8bc34ca83b993a10684dc8ecb0c64468f92e462b1c9faf8211c6248f692
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.9.6 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page