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.

JM
James Morton
Written By James MortonLast updated 1 day ago

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:

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=true

Common provider settings:

Provider

Host

Port

SendGrid

smtp.sendgrid.net

587

Postmark

smtp.postmarkapp.com

587

Mailgun

smtp.mailgun.org

587

Gmail

smtp.gmail.com

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-1

Set 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_xxxxxxxxxxxx

RESEND_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.

  1. Set up SPF: add your email provider to your domain's SPF record.
  2. Enable DKIM: sign outgoing emails with your domain's DKIM key.
  3. Configure DMARC: set a DMARC policy for your sending domain.
  4. 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

  1. Check that one provider is configured (EMAIL_SMTP_HOST, the three EMAIL_SES_* variables, or EMAIL_RESEND_API_KEY) plus EMAIL_FROM.
  2. Review the server logs for connection or authentication errors.
  3. Verify your hosting provider doesn't block the SMTP port.
  4. For SES, confirm EMAIL_SES_REGION matches 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

  1. Verify SPF, DKIM, and DMARC records for your sending domain.
  2. Don't use a free mailbox domain (such as gmail.com or outlook.com) as the EMAIL_FROM address.
  3. Check your sender reputation with a tool such as mail-tester.com.

Users not receiving notifications

  1. Check the user's notification preferences in their account settings.
  2. Verify they haven't unsubscribed from the post.

Was this helpful?

Your feedback shapes what we write next.