Email header analysis tool | EML raw source delivery route & security analysis | ZeroTools

This is an email header analysis utility designed to parse and organize raw email source code (EML or text formats) directly within your browser. By extracting key fields such as Received hops and Authentication-Results, it helps you visualize the delivery timeline and review security records like SPF, DKIM, and DMARC. Note that this tool simply parses the text provided and does not perform active DNS lookups, cryptographic validation, or definitive safety assessments.

Loading tool interface...

When to use this tool

Back to the tool ↑

Inspect delivery hops and authentication results recorded in an email header.

Try it first

Paste a fictional header with a Received field and look for the host from that field in the delivery hops.

Before you start

Results come from the header you provide. They do not independently verify the sender or the recorded authentication result.

Client-Side Processing Notice

This email header analyzer processes your pasted text or selected files entirely within your web browser. The tool's logic does not upload your email headers or content to external servers for analysis. However, standard site assets, analytics, or advertising scripts on this webpage may still communicate with their respective services.

ZeroTools: Browser Processing & Privacy

ZeroTools focuses on tools that process input on your device. Check each tool’s scope and limitations before use.

Processing and privacy policy
Chapter 1

Scope of the Analysis Utility and Core Parsing Mechanics

This application is a specialized text parsing utility designed to extract and organize the raw header sections of standard email source files.

It is not a full-featured email client or a MIME renderer; it will not decode message bodies, render HTML content, or extract file attachments.

The tool operates exclusively on the text you provide, whether by pasting a raw header block into the input area or by loading a file with a .eml or .txt extension.

When a file is selected, the browser uses the File.text method to load the contents into memory, and the fileload handler automatically analyzes the text.

Similarly, the pasting handler automatically analyzes pasted content. However, simply typing input into the text area alone does not trigger parsing; it requires you to manually click the Analyze button.

The parsing logic automatically unfolds lines separated by a newline followed by a space or tab, and splits the input at the first double newline (or the first blank line) to isolate the header block from the body.

All operations, from line unfolding to regular expression matching, occur entirely within your local browser environment. For example, if you input small public fake headers from demo@example.invalid with a Subject and one Authentication-Results assertion, rather than personal mail, the tool will instantly populate the overview tab.

It extracts basic fields such as Subject, From, To, Date, Message-ID, Return-Path, and Reply-To, and compiles a full list of all found headers.

Repeated basic fields will show the last value, and the raw headers list preserves duplicates. If an edited input area is left empty, it does not clear old results automatically; the important clear button must be used to clear the parsed state.

It is crucial to understand that this tool operates under a strict set of limitations. It acts purely as a local string parser and does not perform active network operations.

It performs no actual SMTP, DNS, or security checks. It will not query DNS servers to verify sender domains, nor will it attempt to cryptographically validate digital signatures found within the headers.

The output displayed is merely a reflection of the text that was input, structured for easier reading by a human analyst. You should not rely on this tool to provide a definitive verdict on the authenticity or safety of an email message.

Chapter 2

Handling Folded Lines and Key-Value Extraction Logic

Email headers frequently employ a technique called folding, where a single logical header field spans multiple lines to accommodate length restrictions.

According to standard conventions, a folded line is indicated when a newline character is immediately followed by a space or a tab character.

This tool first processes the raw input by executing a global string replacement that collapses these specific newline-whitespace sequences into a single space character.

After unfolding, the text is split into individual lines. The parser then examines each line to locate the first colon character.

The substring preceding the colon is identified as the header key, and the substring following the colon is recorded as the header value, with any leading or trailing whitespace trimmed.

Lines that do not contain a colon are simply ignored and omitted from the final structured list. In cases where multiple headers share the same key, such as the fundamental fields like Subject or From, the tool's basic information extraction routine will overwrite earlier values with later ones, meaning only the last encountered value is displayed in the overview.

The notable exception is the Received header; all instances of Received headers are collected and passed to a dedicated routing analysis module.

Because the parsing relies on these relatively simple string operations rather than a strict RFC-compliant finite state machine, anomalies in the input formatting or non-standard line endings could result in incomplete extraction.

If the parsed results appear incorrect, you should manually inspect the raw text to ensure it conforms to typical header folding rules.

Chapter 3

Basic Header Extraction and Full Header Search Constraints

Once the keys and values are separated, the tool attempts to populate a basic overview interface by searching for specific standard keys: subject, from, to, date, message-id, return-path, and reply-to.

It is important to note that the values extracted for these fields are presented exactly as they appear in the raw text, adhering to an exact standardized trim scope.

The tool does not perform MIME encoded-word decoding. If the Subject or From fields contain strings encoded according to RFC 2047, they will be displayed in their raw, encoded format rather than being translated into readable characters.

The From address displayed in the overview represents the display sender, which is easily forged and does not represent the authenticated origin of the message.

The Date field reflects the timestamp asserted by the sender's mail client and does not necessarily correlate with the actual time the message entered the mail system.

To assist in navigating large header blocks, the full header tab includes a search filter. This search performs a simple, case-insensitive substring match against both the parsed keys and the values, and the browser Clipboard copy works if present.

It does not support complex regular expressions, boolean operators, or structural queries. Because typing or deleting input alone changes the rawInput state ONLY, the displayed parsed results can be stale and out of sync with the text box until you click the Analyze button again.

Using the handleClear function will clear the rawInput, headers, basic fields, hops, and auth results, and it hides the results display, but it DOES NOT reset the searchQuery itself.

Reloading the page will completely discard all component state. If you need to preserve your findings for documentation or incident response purposes, you must manually copy the required information or save the original raw text file securely.

Chapter 4

SPF, DKIM, and DMARC Authentication Extraction and Limitations

The authentication status tab is designed to extract information from both the Authentication-Results and ARC-Authentication-Results headers.

The tool scans the parsed header list for these specific keys and concatenates their values into a combined string. It then applies regular expressions to this combined string to find the first occurrence of spf=, dkim=, and dmarc= to determine each authentication status.

However, because the independent regex details for a status can come from a completely different record or clause within that combined text, the independently reported detail may inadvertently belong to another clause.

For SPF, the tool attempts to extract an allowed status—such as pass, fail, softfail, neutral, or none—and any accompanying detail enclosed in parentheses.

For DKIM and DMARC, it attempts to extract a status of pass, fail, or none. The interface will default to an unknown status if the extracted string does not match these expected keywords or if there is a missing record entirely.

You must exercise extreme caution when interpreting these results, as there is absolutely no trusted-server authserv-id or origin validation performed.

The status text can be easily forged, and its presence is not even proof that any server actually performed a check. A displayed status of ALL PASS is not a guarantee of safety.

It merely means that a server somewhere in the delivery chain recorded a pass result in that text field, or that an attacker injected it.

The tool does not perform any ARC signature validation, it does not calculate DMARC alignment rules, it does not perform DKIM cryptographic signature verification, and it does not validate SPF records against live DNS data.

An attacker can craft an email with a forged Authentication-Results header that claims all protocols passed. Therefore, these extracted values should only be used as preliminary indicators and must be corroborated with trusted server logs and independent verification mechanisms.

Chapter 5

Parsing Received Hops and Calculating Network Delays

The routing analysis module processes all instances of the Received header to construct a timeline of the email's transit. Because email systems prepend new Received headers at the top of the message as it passes through each relay, the parseReceivedHops function first collects these headers and reverses their order to chronological oldest-first for its internal delta calculation.

However, the JSX rendering layer uses hops.slice().reverse() so that the display maintains the newest hop at the top and the oldest hop at the bottom.

The parsing logic attempts to isolate the routing information from the timestamp by splitting each value at the last semicolon. The portion following the semicolon is treated as a date string.

The tool uses the standard browser Date.parse function to convert this string into a timestamp. The tool calculates the time difference between adjacent hops by subtracting the previous timestamp from the current one.

If the resulting difference is missing, negative, or equal, the delta is internally clamped to zero. The transfer time badge is rendered only when the index is greater than zero and the delay is strictly greater than zero, meaning there is no explicit 0-seconds badge displayed for zero-delay hops.

For example, two small Received header examples with timestamps of 06:00:00 UTC and 06:00:02 UTC will produce a 2-second delay internally, but this is merely a calculation based on the text and offers no mathematical proof of precision.

The routing portion preceding the semicolon is subjected to basic regular expressions to extract the source host, receiving host, protocol, and IP addresses.

This heuristic IP regex may only capture partial matches, and there is absolutely no geolocation or trusted routing verification performed.

The calculated delays are entirely dependent on the unverified timestamps recorded by potentially untrusted servers, meaning they cannot be used as precise network latency measurements.

Chapter 6

Investigation Guidelines and Inherent Security Limitations

When utilizing this tool to investigate suspicious messages, such as potential phishing campaigns or unsolicited spam, you must adopt a holistic approach and recognize the inherent limitations of header analysis.

The presence of valid authentication records or a seemingly normal delivery path does not prove an email is benign. Sophisticated attackers regularly send malicious content from compromised accounts on legitimate domains, which will result in fully valid SPF, DKIM, and DMARC passes.

Therefore, a result showing all passes should never be interpreted as a definitive safety guarantee. You must independently evaluate the contents of the message, including any requested actions, hyperlinks, and file attachments, which this tool does not analyze.

Conversely, a failure in authentication does not automatically confirm malice, as legitimate forwarding services or mailing lists frequently break DKIM signatures or fail SPF checks.

When examining the Received hops, pay close attention to the transition between external networks and your trusted internal infrastructure.

Headers inserted before the email reached your organization's secure boundary are entirely untrusted and can be completely fabricated to mislead investigators.

Because this tool operates as a stateless local string parser, it cannot provide contextual threat intelligence, IP reputation lookups, or historical domain analysis.

For rigorous incident response, you must rely on authoritative data sources, such as your organization's mail gateway logs, which record the actual network connections and cryptographic handshakes that occurred during message reception, rather than relying solely on the mutable text found within the email header.

Frequently Asked Questions (FAQ)

A.
No. The tool parses and displays the text found in the email headers, including authentication records like SPF and DKIM. However, a 'PASS' result simply means a server recorded a pass in the text; it does not prove the email is safe. Attackers can send harmful emails from legitimately authenticated domains or forge the header text entirely. You must always exercise caution and independently verify the message content, links, and sender intent.
A.
The delay is calculated by comparing the timestamps recorded in adjacent Received headers. If the servers' clocks are out of sync, or if the timestamps are missing or unparseable, the calculated difference might be negative or invalid. In these cases, the tool's heuristic logic automatically clamps missing, unparseable, or non-positive deltas to zero, and the interface is designed to render positive badges only, meaning hops without a positive delay simply will not show a badge.
A.
No. The parsing logic executes entirely within your local web browser. Your pasted text or selected files are processed locally and are not transmitted to any external server by this tool. However, standard webpage elements like analytics or advertising scripts operate independently.
A.
The tool extracts the exact text found in the raw header. If the sender's mail client encoded the Subject or From address using MIME encoded-words (RFC 2047) to support non-ASCII characters, the tool will display the raw encoded string rather than decoding it into readable text.