litestar-org / litestar-org/litestar-fullstack

Bug: Mailpit does not receive email

Open
#243 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
610
Forks
86
PR merge metrics
No merged PRs in 30d

Description

### Description

When deploying an new instance and using Docker local resources (i.e. `make start-infra`), the Mailpit server fails to receive the verification email for new account creation.

Mailpit is up and running locally on port 11025 (18025 for WebUI) and `.env` is pointing to it:
```bash
# Email Configuration (SMTP)
EMAIL_ENABLED=true # Set to true to enable email sending
EMAIL_SMTP_HOST=localhost # For Mailpit: localhost, for production: your SMTP host
EMAIL_SMTP_PORT=11025 # For Mailpit: 11025, for production: 587 (TLS) or 465 (SSL)
EMAIL_SMTP_USER= # Mailpit doesn't require auth, leave empty for dev
EMAIL_SMTP_PASSWORD= # Mailpit doesn't require auth, leave empty for dev
EMAIL_USE_TLS=false # Mailpit doesn't use TLS, set true for production
EMAIL_USE_SSL=false # Mailpit doesn't use SSL, set true for production
EMAIL_FROM_ADDRESS=noreply@localhost # Default from email
EMAIL_FROM_NAME="Litestar Dev App" # Default from name
EMAIL_TIMEOUT=30 # SMTP connection timeout in seconds
```

When an account is created, console shows no errors and appears to attempt mail delivery successfully, but the email just never shows up in Mailpit. I don't see any other logs to check for further diagnosis.

### URL to code causing the issue

_No response_

### MCVE

```python

```

### Steps to reproduce

```bash

```

### Screenshots

Image

### Logs

```bash
2026-01-31T02:45:35.248379Z [info ] Found user avatar_url=None created_at=datetime.datetime(2026, 1, 31, 2, 45, 35, 217850, tzinfo=zoneinfo.ZoneInfo(key='Etc/UTC')) email=tim.tester.fourth@mydomain.com failed_reset_attempts=0 id=UUID('019c11f1-0971-7701-9a78-26dcb1e29d3e') is_active=True is_superuser=False is_two_factor_enabled=False is_verified=False joined_at=datetime.date(2026, 1, 31) login_count=0 name=Tim password_reset_at=None phone=None reset_locked_until=None two_factor_confirmed_at=None updated_at=datetime.datetime(2026, 1, 31, 2, 45, 35, 217854, tzinfo=zoneinfo.ZoneInfo(key='Etc/UTC')) username=None verified_at=None
------------------------------------------------------------
Subject: Verify your email address for Litestar Fullstack Template
From: Litestar Dev App
To: tim.tester.fourth@mydomain.com

Verify your email address ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ Litestar Fullstack Template Secure Ap pplication Platform Verify your email address Hi Tim, Thank you for signing up for Litestar Fullstack Template.
```

### Package Version

Latest:
```
Loading environment configuration from .env
Using Litestar Fullstack Template app from env: 'app.server.asgi:create_app'
Starting Granian server process with uvloop ──────────────────────────────────────────────────────────────────────────────────────────
┌──────────────────────────────┬────────────────────────────────────────────────────────┐
│ Litestar version │ 2.19.0 │
│ Debug mode │ Enabled │
│ Python Debugger on exception │ Disabled │
│ CORS │ Enabled │
│ CSRF │ Disabled │
│ OpenAPI │ Enabled path=/schema │
│ Compression │ Disabled │
│ Middlewares │ JWTCookieAuthenticationMiddleware, ViteProxyMiddleware │
└──────────────────────────────┴────────────────────────────────────────────────────────┘
• Applied Vite environment variables
✓ Types exported → openapi: src/js/web/src/lib/generated/openapi.json
• Starting Vite server with HMR
✓ Vite process started
2026-01-31T02:45:06.594704Z [info ] Starting granian (main PID: 28681)
$ vite
2026-01-31T02:45:06.596741Z [info ] Listening at: http://0.0.0.0:8000
2026-01-31T02:45:06.599363Z [info ] Spawning worker-1 with PID: 28688
✓ SPA handler initialized
2026-01-31T02:45:06.747456Z [info ] Discovered domain components by_domain={'accounts': ['AccessController', 'EmailVerificationController', 'MfaChallengeController', 'MfaController', 'OAuthAccountController', 'OAuthController', 'ProfileController', 'RoleController', 'UserController', 'UserRoleController'], 'admin': ['AdminTeamsController', 'AdminUsersController', 'AuditController', 'DashboardController'], 'system': ['SystemController'], 'tags': ['TagController'], 'teams': ['TeamController', 'TeamInvitationController', 'TeamMemberController']} controllers=19 repositories=0 schemas=63 services=12 signals=6
2026-01-31T02:45:06.748048Z [info ] Started worker-1
2026-01-31T02:45:06.748133Z [info ] Started worker-1 runtime-1
• Watching: openapi.json
• Generating TypeScript types...
• openapi-ts config: openapi-ts.config.ts
• Schema types (unchanged)
• Static props types (unchanged)
✓ TypeScript artifacts updated (1085ms)

VITE v7.3.1 ready in 1757 ms

➜ Local: http://localhost:3006/static/
➜ Network: http://10.255.255.254:3006/static/
➜ Network: http://172.18.100.8:3006/static/

LITESTAR 2.19.0

➜ Mode: SPA (index.html)
➜ App URL: http://localhost:8000 ✓
➜ Dev Server: http://localhost:3006
➜ Type Gen: src/lib/generated/
```

### Platform

- [ ] Linux
- [ ] Mac
- [ ] Windows
- [ ] Other (Please specify in the description above)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Run make start-infra with the supplied .env settings, create a new account, and inspect Mailpit on ports 11025 and 18025 alongside the application logs. Trace the verification-email path from account creation and determine why delivery is reported as successful without appearing in Mailpit; done means the verification email is received locally and useful diagnostics are available for failures.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, python
Domain
backend, devops
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.