Skip to content

Releases: keraattin/EmailAnalyzer

v3.0

24 Apr 20:03
0a3b467

Choose a tag to compare

What's Changed

  • Fix quoted-printable decode in get_links (closes #25) by @keraattin in #34
  • Fix IndexError crash in spoof check for unparseable headers (closes #26) by @keraattin in #36
  • Fix attachments parsed in text mode causing encoding errors (closes #27) by @keraattin in #37
  • Feature/issue 38 unit tests by @keraattin in #39
  • Fix TypeError crash when attachment payload is None (closes #28) by @keraattin in #40
  • Fix None attachment filename used as dict key causing TypeError (clos… by @keraattin in #41
  • Fix UnicodeDecodeError on non-UTF-8 encoded emails (closes #30) by @keraattin in #42
  • Fix #31: read file once as binary, pass bytes to get_digests() by @keraattin in #43
  • Fix #32: escape all user-controlled values in HTML report to prevent XSS by @keraattin in #44
  • Fix #33: assign unique IDs to each navbar dropdown by @keraattin in #45
  • feat #46: decode RFC 2047 encoded header values by @keraattin in #52
  • feat #47: extract and investigate public IPs from Received headers by @keraattin in #53
  • feat #48: parse SPF/DKIM/DMARC authentication results into structured… by @keraattin in #55
  • feat #49: add MIME type to attachment data output by @keraattin in #56
  • feat #50: add --defang flag to output URLs in defanged notation by @keraattin in #57
  • Add duplicate attachment detection (#51) by @keraattin in #58
  • Fix/issue 59 qp decoding by @keraattin in #64
  • Fix LINK_REGEX to match single-quoted href attributes (#60) by @keraattin in #65
  • Add file existence check to prevent unhandled FileNotFoundError (#61) by @keraattin in #66
  • Fix unnamed attachment fallback index mismatch (#62) by @keraattin in #67
  • Extract URLs from plain-text body parts in get_links() (#68) by @keraattin in #69
  • Add From display name spoofing detection to header investigation (#70) by @keraattin in #78
  • feat: add suspicious header pattern detection (#71) by @keraattin in #79
  • feat: investigate X-Originating-IP header alongside X-Sender-IP (#72) by @keraattin in #80
  • feat: add Reply-To domain investigation check (#73) by @keraattin in #81
  • fix: wrap HTML report in proper / / str… by @keraattin in #82
  • feat: add --version flag and VERSION constant (#75) by @keraattin in #83
  • feat: add threat summary section to HTML report (#76) by @keraattin in #84
  • feat: add sticky navbar and copy-to-clipboard buttons to HTML report … by @keraattin in #85
  • Feature/issue 77 clipboard sticky navbar by @keraattin in #86
  • Release/v3.0 by @keraattin in #87
  • Merge for Release 3.0 by @keraattin in #88

Highlights

  • Redesigned HTML report (Bootstrap 5.3.3, Font Awesome 6, jQuery removed)
  • Threat Summary card (LOW / MEDIUM / HIGH) with per-check breakdown (#76)
  • Sticky navbar, copy-to-clipboard buttons, clickable IP/URL investigation links (#77)
  • Merged Data + Investigation tables for Links, Attachments, and Digests
  • Five new investigation checks (display name, reply-to domain, x-originating-ip, received IPs, suspicious headers)
  • SPF / DKIM / DMARC authentication results parsed into structured output (#48)
  • New --version (#75) and --defang (#50) flags
  • Full pytest test suite (#38) with fixtures and CLI regression tests

Added - Analysis & Detection

  • Display Name spoofing detection in From header (#70)
  • Reply-To vs From domain mismatch check (#73)
  • X-Originating-IP investigation via VirusTotal & AbuseIPDB (#72)
  • Public IP extraction and investigation from Received headers (#47)
  • Suspicious header pattern detection — missing Message-ID/MIME-Version, future/old Date, suspicious X-Mailer (#71)
  • SPF / DKIM / DMARC authentication parsing with Authentication-Results / Received-SPF fallback (#48)
  • Duplicate attachment detection via SHA256 comparison (#51)
  • Plain-text URL extraction from text/plain body parts (#68)
  • RFC 2047 encoded header decoding (base64 / quoted-printable) (#46)
  • MIME type field on attachment output (#49)

Added - CLI & Output

  • --version flag printing version from VERSION constant (#75)
  • -D/--defang flag to output URLs in defanged notation (#50)
  • -A/--authentication flag for SPF/DKIM/DMARC parsing (#48)
  • Early validation of output format against SUPPORTED_OUTPUT_TYPES
  • File existence check with friendly error before parsing (#61)

Added - HTML Report

  • Threat Summary section with severity badges and per-check alert cards (#76)
  • Sticky navbar and copy-to-clipboard for URLs and hashes (#77)
  • Clickable links for IP/URL values inside Investigation cards
  • Merged Data + Investigation tables for Links, Attachments, and Digests
  • Bootstrap 5.3.3 / Font Awesome 6.5.2 upgrade; jQuery dependency removed
  • Proper <!DOCTYPE html> / <html> / <body> structure with <title> (#74)
  • Authentication entry converted from dropdown to plain nav-item

Added - Testing

  • Initial pytest suite with regression coverage (#38)
  • New test files: test_originating_ip (#72), test_replyto_domain (#73), test_suspicious_headers (#71), test_display_name (#70), test_plaintext_links (#68), test_cli (#75), test_html_generator (#32), test_defang (#50), test_attachment_mime (#49), test_auth_results (#48), test_received_ips (#47), test_rfc2047 (#46)
  • New fixtures for spoofing, IP, encoding, auth, and structural edge cases
  • Expanded happy-path and edge-case coverage across all analyzers (#38)

Fixed - Crashes

  • IndexError in spoof check when From/Reply-To has no parseable address (#26)
  • TypeError when attachment payload is None on multipart sub-parts (#28)
  • TypeError from None attachment filename used as dict key (#29)
  • UnicodeDecodeError on non-UTF-8 encoded emails (#30)
  • Quoted-printable decode applied to entire raw email instead of body (#25, #59)
  • Attachments parsed in text mode causing encoding errors / wrong hashes (#27)
  • File read inconsistency between text and binary modes for digests (#31)
  • Unnamed attachment fallback index mismatch (#62)
  • FileNotFoundError shown as raw traceback when file missing (#61)
  • print_data crash when Duplicate Warning entry present in attachment investigation

Fixed - Security & Correctness

  • XSS in HTML report — all user-controlled values now escaped (#32)
  • Duplicate id=\"navbarDropdown\" across navbar entries; unique IDs assigned (#33)
  • LINK_REGEX failing to match single-quoted href attributes (#60)

Changed

  • README rewritten: new Investigation Checks table, HTML Report section, updated test/fixture lists, plain-text URL extraction note, fixed mail-analyzer.py typo
  • Introduction banner now uses VERSION constant (no more hardcoded version string)
  • AUTH banner shrunk so it doesn't overflow narrow terminals
  • Code quality cleanup: dict literals replace json.loads init, TER_COL_SIZE moved into print_data, unused vars removed
  • Removed Wiki links from README

Full Changelog: v2.0...v3.0

v2.0

25 Jun 19:41

Choose a tag to compare

What's Changed

Full Changelog: v1.0...v2.0

v1.0

26 Nov 13:40
f396dee

Choose a tag to compare

Initial Release

What's Changed

Full Changelog: https://github.com/keraattin/EmailAnalyzer/commits/v1.0