Mailpit’s v1.33.1 release notes list fixes for email-header parsing and Bcc handling, and say that messages Mailpit cannot parse are rejected rather than silently discarded. So if Mailpit 1.33.1 test emails don’t show up, check the application’s actual SMTP or API destination and send result first; then verify capture, parsing, and your query. A successful application test alone does not prove Mailpit saved the message.
This guide is for developers testing their own registration or verification emails, QA engineers reproducing “send passed, message missing” failures, and indie developers checking whether the v1.33.1 parsing changes affect their email integration.
Last updated November 10, 2026; version and behavior checked against the official v1.33.1 release record and Mailpit’s integration, API, and sending documentation.
Mailpit 1.33.1 test emails not showing: start with evidence
“Email sent” can mean several different things in a test:
- The test asserted that your application called its mail-sending method.
- The application attempted an SMTP transaction or made an HTTP request.
- The receiving Mailpit instance accepted the message.
- Mailpit parsed and stored the message.
- Your test query found the stored message and matched its contents.
Those results are not interchangeable. A mocked send method can satisfy an assertion without opening a network connection. A server response can confirm that a request was handled without proving that your test later queried the correct mailbox, environment, or message. Start by identifying the last step you can demonstrate with logs or a response.
Mailpit’s integration-testing guide describes ways to connect tests to Mailpit. Compare your test setup with the configuration your application actually loads. Pay particular attention to environment variables, configuration files, and test-specific overrides: a developer’s local environment may point to Mailpit while a container or CI job points elsewhere.
Confirm the application’s destination
First find the outgoing message path used by the failing test. Your application may send through SMTP, call an HTTP endpoint, or use a test adapter that bypasses both. Check the effective configuration at runtime rather than relying on a sample file or a value that works on your laptop.
For SMTP, verify the configured host, port, credentials if used, and transport security settings against Mailpit’s SMTP configuration documentation. For direct HTTP use, compare the base address and API path with the HTTP configuration documentation. Do not assume the address used by a browser is reachable from the application process.
A common container mistake is to use a loopback address in the wrong network namespace. “Localhost” means the machine or container making the connection. If the application runs inside a container and Mailpit runs in another service, an address that points back to the application container will not automatically identify the Mailpit service. Conversely, a host-facing address used in a browser may not be the right address from inside a container. Check your compose, test-runner, or deployment network configuration and use the service name or host address appropriate to that environment.
Then inspect the send result. Look for the SMTP transaction outcome or HTTP response, along with connection errors, timeouts, and application-side exceptions. If the application reports a failure, preserve the complete relevant log context before changing settings. If it reports success, record which destination it contacted and compare that with the Mailpit instance you are viewing.
| What you observe | What it demonstrates | Next check |
|---|---|---|
| The test’s send-method assertion passes | The application reached that code path; a network send may not have occurred | Confirm the test does not mock or replace the transport |
| An SMTP or HTTP request appears successful | The application received a response from the configured destination | Verify the destination is the Mailpit instance you opened |
| The message appears in the Mailpit interface | Mailpit captured a message in that instance | Check whether the test is searching the same instance and message |
| The message is found through the API | The query returned a matching message from the API target | Validate the test’s filters, identifier, and content assertions |
Mailpit’s sending documentation is useful when you need to distinguish how a message is submitted from what your application’s own send result means. Compare its documented workflow with your application’s actual transport. Do not treat a successful call to a local wrapper as proof that the receiving server accepted the message.
Check parsing before blaming delivery
Mailpit 1.33.1’s release record includes changes involving header parsing, Bcc handling, and messages that cannot be parsed. Those changes matter when a test fixture contains unusual or malformed headers. They do not establish that every missing message is a parsing problem, or that every header-format issue has the same outcome. Confirm the behavior against the actual release record instead of inferring an undocumented error code or rule.
When the application appears to have reached the correct Mailpit instance but the message is not visible, keep the exact raw message or a reproducible fixture. Include the headers and body, but remove secrets and personal data that are not needed to reproduce the issue. Also retain the server response and relevant application logs. Then compare a normal fixture with the failing one, changing only the suspect header or content.
This helps isolate whether the failure follows a particular message shape. For example, if your own product generates a non-UTF-8 display name or a Bcc recipient, test those cases separately. The release notes specifically mention related handling changes; they are a reason to reproduce the case on the version you run, not a guarantee that a change fixes every custom message.
Mailpit has a documented API for querying messages. Use it to check whether the message is present even when your automated test says it cannot find one. If it is present in the interface but not in your test result, focus on the query and assertion. If neither the interface nor the API shows it, return to the send destination, request result, and parseable-message evidence.
Separate a missing capture from a failed query
Mailpit API email search can fail for reasons that have nothing to do with SMTP delivery. Your code may be querying a different base address, applying a sender or recipient filter that excludes the test message, or reading an identifier that does not refer to the message it just caused to be sent. A query that returns no matches is not, on its own, proof that Mailpit never received the email.
Use the interface and API as independent checks. In the interface, search broadly enough to avoid excluding the message by a stale recipient or sender filter. In the API, inspect the request URL, response status, returned data, and any filters your test adds. Compare the test’s target address and run-specific marker with the actual message fields. If your code fetches a message after listing results, verify that it uses an identifier form supported by the API documentation for your installed version.
| Check | If the message is visible | If the message is not visible |
|---|---|---|
| Mailpit interface | Capture likely worked; compare your test filters and assertions | Confirm you opened the instance used by the application |
| API message listing or search | Review query conditions and the selected message identifier | Check API base address, request result, and whether the message reached this instance |
| Message detail and content assertion | Check whether the assertion expects the right recipient, subject, or body | Preserve the send response and raw message, then investigate transport and parsing |
Avoid making “latest message” assumptions without validating how your test selects a result. Other tests may send messages to the same address, and a broad query can return an unexpected item. Prefer a distinctive recipient, subject, or test-run marker where your product allows it. Keep the marker in test data, not in a real user’s personal information.
The practical split is simple: if the message exists in Mailpit but your test cannot retrieve it, repair the query. If it does not exist there, repair or investigate the path to that Mailpit instance before changing assertions.
Reproduce the failure with a controlled checklist
Use the following sequence in an isolated environment for a product you own or are authorized to test. Change one variable at a time so the result identifies a cause instead of adding more uncertainty.
- [ ] Confirm the test uses a real mail transport rather than a mock, stub, or alternate test adapter.
- [ ] Print or inspect the effective SMTP host and port, or the HTTP API base address, from the failing test process.
- [ ] Confirm that this address reaches the Mailpit instance you have open; account for container and host network boundaries.
- [ ] Save the application’s send result and relevant logs, including connection or request failures.
- [ ] Check the Mailpit interface without restrictive sender, recipient, or search filters.
- [ ] Query the same instance through its documented API and inspect the request and response.
- [ ] If the message is absent, preserve a sanitized raw fixture and compare it with a known-good message.
- [ ] If the message is present, correct the test’s search conditions, message selection, or content assertion.
- [ ] Repeat the failing case with the relevant header variation and record whether capture and parsing both succeed.
This sequence avoids a costly detour: changing the message template when the application is sending to the wrong instance, or changing the SMTP setup when the message is already stored and only the API query is wrong.
A useful incident note includes the application environment, the transport selected, the destination address with secrets removed, the send response, the message fixture, and the exact query used by the test. It should also say which Mailpit version was running. Avoid recording credentials, access tokens, or unnecessary personal data in CI logs. If you need guidance on limiting what you expose in test data, review Tmpkey’s data notice and apply the same minimization principle to your own fixtures.
Verify the repair without overstating the result
After making a change, repeat the test path that originally failed. Include a normal message and, where relevant to your product, the non-UTF-8 display-name or Bcc case associated with the v1.33.1 release notes. Record separate outcomes for transport, Mailpit capture, parsing, API retrieval, and content assertions. A single green test can otherwise hide which stage actually improved.
A clear acceptance record might say: “The application connected to the configured Mailpit instance; the message appeared in the interface; the API query returned the expected message; the recipient and body assertions passed.” If a particular message shape still fails, record that limitation instead of treating the other cases as proof that the failing path is fixed.
Most importantly, local capture has a narrow boundary. It verifies the path from your application to the local test receiver, and whatever parsing and retrieval you check there. It does not prove that an external provider accepted a production message, placed it in an inbox, or avoided a spam folder. For those questions, test an authorized external mailbox separately and review the sending domain’s authentication and delivery setup. Do not turn a Mailpit result into a claim about real-world inbox placement.
Choose the right receiver for the test
Mailpit is appropriate when you want a controlled local receiver and want tests to inspect captured messages without sending them to real users. Its advantages are local visibility and a clear debugging boundary. Its limitations are equally important: it cannot establish external delivery or reproduce every recipient provider’s filtering decision.
A separate receiving address can be useful when you need to inspect a message outside the local capture path—for example, to validate how a controlled test account receives a message. That is a different test from checking whether your application handed a message to Mailpit. Keep the two results separate in test reports.
If you need a separate address for a controlled test of your own product, Tmpkey is one option to evaluate as a receiving endpoint. Check the current service page for its available functions, signup requirements, and retention details before relying on it in a test workflow. Do not assume that a temporary address guarantees delivery, and do not use one for accounts that require long-term recovery or reliable future correspondence. Use Mailpit when you need local capture evidence; use an external receiving endpoint only when the test specifically requires evidence beyond that local boundary.
Return to your inbox and check your address
Once you have a working connection, continue on your original device and browser. For ongoing email access, choose a forwarding alias.