Updated 2026-10-08
How to Set Up Custom SMTP for Supabase Auth
In the Supabase dashboard, open Authentication, go to the Emails section and the SMTP Settings tab, turn on Enable Custom SMTP, then enter Sender email on your domain, Host smtp.bulko.io, Port number 587 and your Bulko SMTP username and password. Supabase then sends sign-up confirmations, magic links, invites and password resets through that server instead of its limited built-in sender.
Supabase SMTP settings
| Field | Value |
|---|---|
| Enable Custom SMTP | On |
| Sender email | An address on your domain, for example [email protected] |
| Sender name | Your app or company name |
| Host | smtp.bulko.io |
| Port number | 587 (465 and 2525 also work) |
| Minimum interval between emails | Keep the default or a low value such as 60 seconds |
| Username | Your Bulko username, for example smtp_xxxxxxxxxxxxxxxx |
| Password | Your Bulko SMTP password from Dashboard > SMTP Access |
Step-by-step setup
- Buy an SMTP package on the Bulko SMTP Relay page. The username and password appear in Dashboard > SMTP Access and are emailed after payment.
- Verify the domain you will send from in Sending Domains and publish the DKIM TXT record (selector
bk1) and thebnc.yourdomain.comCNAME. Supabase recommends SPF, DKIM and DMARC for auth email, and verification lets all three align. - Open your project in the Supabase dashboard and go to Authentication. In the Emails section (under Notifications in the sidebar), open the SMTP Settings tab. Older dashboards showed this block under Project Settings.
- Turn on Enable Custom SMTP. Fill in Sender email with an address on your verified domain and Sender name with your product name.
- Under the SMTP provider settings, enter Host
smtp.bulko.io, Port number587, Username and Password. Supabase negotiates encryption on its own, so there is no separate TLS switch. Use 465 or 2525 only if 587 does not work for you. - Check Minimum interval between emails. It is the minimum time Supabase waits between email requests, which limits spam; keep it low (for example 60 seconds) so users can quickly request a new link.
- Click Save. Then open Authentication > Rate Limits: after you enable custom SMTP, Supabase starts with a low limit of 30 emails per hour. Raise the email sent value to match your expected sign-up volume, staying within Bulko's 2,000 emails per day per SMTP account.
To change the wording of the messages, edit the templates in Authentication > Emails > Templates. The templates are independent of the SMTP server, so your existing confirmation and magic link templates keep working. If you manage projects as code, the Supabase Management API exposes the same settings (snippet below).
Supabase Management API: configure custom SMTP
# Set custom SMTP for a Supabase project via the Management API
# Get a personal access token at https://supabase.com/dashboard/account/tokens
export SUPABASE_ACCESS_TOKEN="your-access-token"
export PROJECT_REF="your-project-ref"
curl -X PATCH "https://api.supabase.com/v1/projects/$PROJECT_REF/config/auth" \
-H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"external_email_enabled": true,
"smtp_admin_email": "[email protected]",
"smtp_sender_name": "Your App",
"smtp_host": "smtp.bulko.io",
"smtp_port": "587",
"smtp_user": "smtp_xxxxxxxxxxxxxxxx",
"smtp_pass": "your-bulko-smtp-password"
}'
Send a test email
The quickest test is Authentication > Users > Add user > Send invitation to an inbox you can read, or a sign-up or password reset from your app. The invite or confirmation email should arrive from your Sender email within a minute. If nothing arrives, open the Auth logs in the dashboard (Logs section, Auth) and look for the SMTP error, for example 535 for a login problem or 554 5.7.1 for a filtered message. Open the received email, view the original headers and confirm SPF and DKIM pass.
Troubleshooting
| Problem | Fix |
|---|---|
| Error sending confirmation email or invite email | Supabase could not deliver through the SMTP server. Check the Auth logs for the exact SMTP reply and verify Host smtp.bulko.io, the port and the credentials. |
| 535 Authentication failed in the Auth logs | The Username or Password is wrong. Paste them again from Dashboard > SMTP Access; the username looks like smtp_xxxxxxxxxxxxxxxx, not your Sender email. More causes: bulko.io/en/smtp-errors/535/. |
| Connection or TLS handshake errors | Use port 587 first. If a different port is required, 465 is implicit TLS and 2525 is STARTTLS. Port 25 is not offered for submission. |
| email rate limit exceeded | This is Supabase's own rate limit, not the SMTP server. Raise the email limit in Authentication > Rate Limits, which starts at 30 per hour after custom SMTP is enabled. |
| 554 5.7.1 message rejected | Bulko's content filter flagged the message. Make sure your templates do not contain misleading links or brand impersonation, and that links point to your own domain. |
| Confirmation emails land in spam | Send from a verified domain, keep auth and marketing mail on different From addresses as Supabase suggests, and use a custom domain for auth links where possible. Check SPF with the Bulko SPF checker. |
FAQ
Why do I need custom SMTP in Supabase?
The built-in email sender is meant for testing, is heavily rate-limited and only sends to addresses of your project team. A production app needs its own SMTP server for sign-ups, magic links and password resets.
Which port should Supabase use?
Port 587 is the standard choice. Bulko also accepts 465 with implicit TLS and 2525 with STARTTLS.
What does Minimum interval between emails mean?
It is the minimum time that must pass between email requests, which protects against spam and abuse. The hourly volume limit is a separate setting in Authentication > Rate Limits.
Can I send marketing email from Supabase through the same SMTP?
Supabase Auth only sends auth emails. You can use the same Bulko account from your backend for other mail, but Supabase advises separate From addresses or domains for auth and marketing.
How much does it cost?
Bulko SMTP is pay-as-you-go: $5 for 5,000 emails, $15 for 20,000, $30 for 50,000 or $60 for 150,000, one-time payment with no expiry. The default limit is 2,000 emails per day per SMTP account.
Get SMTP credentials for Supabase
One-time payment by card or crypto, no subscription. Unused emails never expire. 2,000 emails per day per SMTP account.
What you can send: Acceptable Use Policy.