Mailroom stores outgoing mail in your database, whole: full MIME, attachments, embedded images, headers. Then it gives you a mailbox at /mailroom to read it.
composer require --dev ebbbang/laravel-mailroom
php artisan mailroom:installThen open /mailroom. Your next email will be there.


MAIL_MAILER=logOne line in a log file. The attachments are thrown away.
MAIL_MAILER=arrayGone at the end of the request.
MAIL_MAILER=mailroomThe whole message, kept in your database, with somewhere to read it.
No build step, no npm, no published assets. The styles are inlined, so it works offline and behind a strict CSP.
Inbox, Unread and Spam checked, the ten people on the most mail, search as you type, and j / k to move through it.
HTML and text bodies, attachments byte for byte, inline images, Cc, Bcc, the envelope actually delivered to, tags, metadata and custom headers.
Images, PDF, audio, video, CSV as a table, calendar invites and more, in a lightbox. Served from an allowlist, never from the attachment's own claim.
See how Gmail or Outlook actually renders it. Left unchanged, the stored message goes out byte for byte.
Score a message through Postmark's free SpamCheck API and see each rule that fired. Off until you choose a driver.
Off in production, local only until you define a gate, and every message body rendered in a sandboxed frame that cannot run scripts.
Testers read mail in the browser: no third-party catcher to sign up for, no inbox credentials to pass around. Read state is per person, so two testers never clear each other's mail.
Staging and QA →