Working with mail servers? Then you already know one thing:
π SMTP logs are messy.
When a client asks:
βCan you send me only my email logs?β
Youβre stuck with a huge log file containing thousands of mixed records.
In this post, Iβll show you a simple but powerful way to extract a specific emailβs traffic from SMTP logs using PHP.
π¨ The Problem
SMTP logs are not structured per email.
Instead, they look like this:
SMTP-IN 63EBA13D... 20.57..79 EHLO
SMTP-IN 63EBA13D... 20.57..79 MAIL FROM
SMTP-IN 63EBA13D... 20.57..79 RCPT TO:user@example.com
SMTP-IN 63EBA13D... 20.57..79 DATA
π Different emails are mixed together
π Same IP continues the flow
π Logs are split across multiple lines
So filtering by email alone is not enough.
π‘ The Solution
Hereβs the trick:
Find the line containing the target email
Extract the IP address from that line
Collect nearby lines with the same IP
This reconstructs the full SMTP flow.
βοΈ PHP Script
<?php
$logFile = __DIR__ . "/log/SMTP-Activity.log";
$outputFile = __DIR__ . "/log/output.log";
$targetMail = "user@example.com";
$range = 100;
$excludeIp = "185.86.*.14";
$lines = file($logFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$total = count($lines);
$out = fopen($outputFile, "w");
for ($i = 0; $i < $total; $i++) {
if (stripos($lines[$i], $targetMail) !== false) {
$parts = preg_split('/\t+/', $lines[$i]);
$ip = trim($parts[4] ?? '');
if (!$ip || $ip === $excludeIp) continue;
$start = max(0, $i - $range);
$end = min($total - 1, $i + $range);
fwrite($out, $lines[$i] . "\n");
for ($j = $start; $j <= $end; $j++) {
$p = preg_split('/\t+/', $lines[$j]);
$currentIp = trim($p[4] ?? '');
if ($currentIp === $excludeIp) continue;
if ($currentIp === $ip) {
fwrite($out, $lines[$j] . "\n");
}
}
fwrite($out, "\n\n");
}
}
fclose($out);
echo "Done!";
?>
π What You Get
Full SMTP flow for a specific email
Clean, client-ready log output
Faster debugging & analysis
π― Use Cases
Extract logs for a specific client
Debug email delivery issues
Detect brute-force login attempts
Analyze spam behavior
π Full Tutorial (Detailed Explanation)
If you want a step-by-step explanation with real examples:
π https://sizinsayfaniz.com/blog2/Kurumsal-Mail-Sunuculari-Icin-Php-Log-Analizi.html
π» GitHub Repository
π https://github.com/cahit2834/smtp-log-analiz-php
β‘ Final Thoughts
SMTP logs look chaotic, but with the right approach, you can extract meaningful insights easily.
If you're managing a mail server, this method will save you hours.
β If this helped you, consider starring the repo!
Top comments (0)