opcodesio/mail-parser
Simple, fast PHP 8+ email/MIME parser with a clean API—no mailparse extension required. Parse .eml strings/files, read headers (From/To/Subject/Date/size), and extract HTML/text bodies, parts, and attachments.
composer require opcodesio/mail-parser..eml file (e.g., from storage) into a structured object:
use Opcodes\MailParser\Parser;
$parser = new Parser();
$email = $parser->parse(file_get_contents('message.eml'));
echo $email->subject;
echo $email->from->email; // => 'sender@example.com'
README in the GitHub repo for quick examples and API reference — despite low stars, it’s actively maintained (last release in 2026)..eml files dropped by MailTrap, Mailgun, or custom MX listeners into structured arrays/objects for database storage or job queues.routes/web.php or routes/console.php to parse uploaded .eml files via a controller:
public function store(Request $request)
{
$email = (new Parser())->parse($request->file('eml')->get());
DB::table('emails')->insert([
'subject' => $email->subject,
'from_email' => $email->from->email,
'body_text' => $email->text,
'body_html' => $email->html,
'created_at' => now(),
]);
}
foreach ($email->attachments as $attachment) {
Storage::put("attachments/{$email->message_id}/{$attachment->filename}", $attachment->content);
}
text/calendar, multipart/related) may require fallback logic — always inspect $email->rawStructure when parsing fails silently.iso-8859-1) are auto-decoded, but double-check $email->rawHeaders if subject/email addresses look garbled.$parser = new Parser();) instead of instantiating per-message..eml fixtures (including multipart, empty attachments, and broken boundaries) in your unit tests — the package’s parsing is robust, but your fallback logic shouldn’t assume perfection.Parser and override createMessage() to inject custom message classes for better type safety in your app.How can I help you explore Laravel packages today?