Configure email delivery
Set up outbound email on a self-hosted Quackback instance with exactly one provider (SMTP, Amazon SES, or Resend), plus sender identity, deliverability, and troubleshooting.
A self-hosted Quackback instance sends sign-in codes, invitations, and notifications through one email provider you configure: SMTP, Amazon SES, or Resend. On Quackback Cloud, email delivery is handled for you and you can skip this article.
What Quackback sends
To portal users (voters and authors):
- Status changes on posts they voted on or wrote
- New comments on posts they wrote or follow
- Team replies to their posts
Users can unsubscribe from individual posts, or from all notifications in their account settings.
To your team:
- Alerts for new feedback, mentions, and other workspace events. Each teammate picks which ones they get. See Configure admin notifications.
Sign-in emails:
- Six-digit sign-in codes, and magic links when enabled. These are sent regardless of notification preferences.
Before you start
You need credentials for exactly one sending provider (an SMTP server, Amazon SES, or Resend), and a sender address on a domain you control.
Set up email
Configure exactly one sending provider with environment variables, then restart Quackback.
Warning: If more than one provider is configured, the app refuses to start and the log names the conflicting variables. Remove all but one.
Every provider also needs a sender address:
EMAIL_FROM=Quackback <[email protected]>Option 1: SMTP
SMTP works with almost any email service or your own mail server.
EMAIL_SMTP_HOST=smtp.example.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=your-username
EMAIL_SMTP_PASS=your-password
# For port 465 (implicit TLS):
# EMAIL_SMTP_SECURE=trueCommon provider settings:
Provider | Host | Port |
|---|---|---|
SendGrid |
| 587 |
Postmark |
| 587 |
Mailgun |
| 587 |
Gmail |
| 587 |
Option 2: Amazon SES
Send through the SES API. All three variables are required. An IAM user with ses:SendEmail is enough.
EMAIL_SES_ACCESS_KEY_ID=AKIA...
EMAIL_SES_SECRET_ACCESS_KEY=...
EMAIL_SES_REGION=us-east-1Set EMAIL_SES_REGION to the region your sending identity is verified in. Identities are regional, so there is no default, and the wrong region rejects every send.
Option 3: Resend
EMAIL_RESEND_API_KEY=re_xxxxxxxxxxxxRESEND_API_KEY is accepted as an alias.
Note: Receiving through Resend while another provider sends: Resend's inbound webhook carries no message body, so Quackback fetches it with your Resend key. To keep a Resend key for receiving only while SMTP or SES sends, set
EMAIL_INBOUND_PROVIDER=resend. The key is then used for inbound mail only and doesn't count as a second sending provider. See the inbound email section of Environment variables.
No provider configured
If no provider is configured, sign-in codes are printed to the server log instead of emailed, and all other emails are skipped. This is handy for a first test, but configure a provider before you invite anyone.
Sender identity and deliverability
The EMAIL_FROM address appears in the From field of every email. Use a domain you own and have configured with SPF, DKIM, and DMARC records. This improves deliverability and keeps emails out of spam.
- Set up SPF: add your email provider to your domain's SPF record.
- Enable DKIM: sign outgoing emails with your domain's DKIM key.
- Configure DMARC: set a DMARC policy for your sending domain.
- Use a dedicated sending domain: for example
[email protected], so feedback emails don't share reputation with marketing email.
Emails use your workspace branding, such as your logo and workspace name. Configure it in Admin > Settings > Branding.
Receive email
Sending and receiving are separate. To let customers email your support inbox and have replies thread back into conversations, see Set up the email channel and, if you can't expose a public webhook, Receive email over IMAP.
Troubleshooting
Emails not sending
- Check that one provider is configured (
EMAIL_SMTP_HOST, the threeEMAIL_SES_*variables, orEMAIL_RESEND_API_KEY) plusEMAIL_FROM. - Review the server logs for connection or authentication errors.
- Verify your hosting provider doesn't block the SMTP port.
- For SES, confirm
EMAIL_SES_REGIONmatches the region your sending identity is verified in.
For Resend, you can test the API key directly:
curl -X POST 'https://api.resend.com/emails' \
-H 'Authorization: Bearer re_xxxxx' \
-H 'Content-Type: application/json' \
-d '{"from":"[email protected]","to":"[email protected]","subject":"Test","text":"Test"}'App refuses to start: more than one email provider
The log lists each configured provider and its variables. Remove all but one. If the extra one is a Resend key kept for inbound mail, set EMAIL_INBOUND_PROVIDER=resend.
Emails going to spam
- Verify SPF, DKIM, and DMARC records for your sending domain.
- Don't use a free mailbox domain (such as gmail.com or outlook.com) as the
EMAIL_FROMaddress. - Check your sender reputation with a tool such as mail-tester.com.
Users not receiving notifications
- Check the user's notification preferences in their account settings.
- Verify they haven't unsubscribed from the post.
Related articles
Was this helpful?
Your feedback shapes what we write next.
