FAQ & troubleshooting
Quick answers to the things people hit most. Still stuck? Open a discussion on GitHub.
Common errors
Section titled “Common errors”“Email address not verified”
Section titled ““Email address not verified””If you’re sending through Amazon SES, your account is still in sandbox mode. Verify the recipient or request production access — see Connecting Amazon SES. Provider credentials are entered in the app UI under Settings, not as environment variables.
Do I need an AWS account?
Section titled “Do I need an AWS account?”No. SES is the cheapest option at volume, but Plume sends through any SMTP provider (Mailgun, SendGrid, Postmark, Resend, …). See Email providers.
“Database connection refused”
Section titled ““Database connection refused””Check PLUME_DATABASE_URL and that Postgres is reachable from the container or host. Plume exits at startup if the database URL is unset, and it runs its embedded migrations automatically on every boot — there’s no separate migrate step.
Tracking links point to localhost
Section titled “Tracking links point to localhost”Set PLUME_BASE_URL to your public HTTPS URL so rewritten tracking and unsubscribe links resolve for recipients.
Deliverability
Section titled “Deliverability”Keep your bounce rate under 5% and complaints under 0.1% — Plume’s auto-suppression handles most of this for you. Always authenticate your sending domain with DKIM, SPF, and DMARC.
Performance
Section titled “Performance”Plume runs as a single process with the send worker and automation worker as in-process goroutines. One instance comfortably handles lists in the hundreds of thousands; the send worker drips to your configured provider within its rate limit so you never burst past your quota. There is no separate worker process to run or scale — sending throughput is governed by your provider’s rate limit, not by Plume.