Problem
Production email only works through Proton Bridge. app/config/settings.py:197-213 offers exactly two paths:
USE_PROTON_BRIDGE=true → my_practice.email_backend.ProtonBridgeEmailBackend, a custom backend whose whole purpose is to accept Proton Bridge's self-signed localhost certificate
- otherwise → console backend (dev only)
A self-hoster with a normal SMTP provider (their own mail server, Mailbox.org, a practice domain at some hoster) has no supported way to send invoices by email. Worse, pointing the Proton backend at an external SMTP host would silently disable TLS certificate verification — it should never be used for anything but localhost bridges.
Proposal
- Add a generic SMTP configuration path using Django's stock
django.core.mail.backends.smtp.EmailBackend, driven by env vars (EMAIL_HOST, EMAIL_PORT, EMAIL_USE_TLS/EMAIL_USE_SSL, credentials, DEFAULT_FROM_EMAIL)
- Keep
USE_PROTON_BRIDGE=true as an opt-in special case; consider guarding the cert-ignoring backend so it refuses non-localhost hosts
- Document both paths in
.env.example and the self-hosting docs
Found during a review of setup-specific assumptions (2026-07-06).
Problem
Production email only works through Proton Bridge.
app/config/settings.py:197-213offers exactly two paths:USE_PROTON_BRIDGE=true→my_practice.email_backend.ProtonBridgeEmailBackend, a custom backend whose whole purpose is to accept Proton Bridge's self-signed localhost certificateA self-hoster with a normal SMTP provider (their own mail server, Mailbox.org, a practice domain at some hoster) has no supported way to send invoices by email. Worse, pointing the Proton backend at an external SMTP host would silently disable TLS certificate verification — it should never be used for anything but localhost bridges.
Proposal
django.core.mail.backends.smtp.EmailBackend, driven by env vars (EMAIL_HOST,EMAIL_PORT,EMAIL_USE_TLS/EMAIL_USE_SSL, credentials,DEFAULT_FROM_EMAIL)USE_PROTON_BRIDGE=trueas an opt-in special case; consider guarding the cert-ignoring backend so it refuses non-localhost hosts.env.exampleand the self-hosting docsFound during a review of setup-specific assumptions (2026-07-06).