Skip to content
couryo

SMTP for Lovable and Bolt

Your app is ready. The sign-in email is not arriving.

You built it in Lovable or Bolt, connected Supabase and shared the link. The first people sign up and never get the confirmation. It is not your app: the Auth email built into Supabase is made for testing.

Create a free account and get the key

3,000 emails a month free. No card to start.

Why the sign-in email does not arrive

Supabase numbers from its Auth documentation, checked on October 20, 2026. Lovable behavior from its Connect to Supabase page, checked on October 24, 2026. If your project uses Lovable's built-in backend instead of your own Supabase project, Lovable sends the sign-in emails itself and this path does not apply.

The fields to paste

In the Supabase dashboard: Authentication > Emails > SMTP Settings, turn on Enable Custom SMTP and fill in:

FieldValue
Host
smtp.couryo.com
Port number
587

STARTTLS. Or 465 (TLS) or 2525 (STARTTLS, when 587 is blocked).

Username
couryo

Always this word, for every account.

Password
ck_live_...

A Couryo API key with the send scope. A ck_test_ key captures the email in the panel and delivers nothing.

Sender email
no-reply@auth.yourapp.com

An address on a domain verified in Couryo.

Sender name
Your app

The name people see in the inbox.

Save, then open Authentication > Rate Limits and raise the emails per hour. When custom SMTP is saved, Supabase starts it at 30 per hour; this is the step most people forget.

The prompt to paste in Lovable

Swap the sample sender for yours and paste it in the Lovable chat (it works in Bolt too). It fixes the redirect links, the reset page and the 429 message, and gives you the Supabase checklist. The key never goes into the code.

Prompt
My app signs people in with my own Supabase project. Its Auth emails (sign-up confirmation, magic link and password reset) will now go out through Couryo's SMTP, from the sender no-reply@auth.yourapp.com. I will fill in the SMTP settings myself in the Supabase dashboard: never ask for the SMTP password and never write it to any file of the project.

Please change the code:
1. In signUp, signInWithOtp and resetPasswordForEmail, pass emailRedirectTo (or redirectTo) with the production URL of the app, never localhost.
2. Create a /reset-password page that reads the session from the link and calls supabase.auth.updateUser({ password }).
3. When Supabase answers 429 or over_email_send_rate_limit, show "We just sent you an email. Check your inbox and spam folder; you can ask again in 1 minute." and disable the resend button for 60 seconds, with a countdown.
4. Then give me this checklist for the Supabase dashboard:
   - Authentication > Emails > SMTP Settings: turn on Enable Custom SMTP. Host smtp.couryo.com, Port number 587, Username couryo, Password = my Couryo API key with the send scope, Sender email no-reply@auth.yourapp.com, Sender name = the name of my app.
   - Authentication > Rate Limits: emails per hour for my sign-up peak.
   - Authentication > URL Configuration: Site URL and Redirect URLs on the production domain.

Three steps, no code change

  1. 1

    Verify the sending domain

    In Couryo, under Domains, add the domain (an auth subdomain such as auth.yourapp.com keeps sign-in apart from marketing). Each DNS record shows its status live, with Cloudflare in one click.

  2. 2

    Create the SMTP key

    In the panel, Keys > Connect to Supabase creates a key with the send scope only and shows every field with a copy button. The full key is shown once.

  3. 3

    Paste, save and test

    Paste the fields in Supabase, raise the rate limit and sign up a test user. The email shows up in Couryo's timeline: accepted, sent, delivered, with the receiving server's answer in plain words.

Full guide: Supabase Auth with custom SMTP

What it costs

Auth emails are transactional: they go out on any plan, including Free.

Every plan and the calculator

Frequently asked questions

Can Lovable switch the Supabase SMTP by itself?
With your own Supabase project, no: Lovable's docs say Auth settings live in the Supabase dashboard, not in Lovable. Paste the SMTP fields there; the prompt on this page fixes the app side and gives you the checklist.
Which SMTP settings do I use?
Host smtp.couryo.com, port 587 (STARTTLS), 465 (TLS) or 2525, username couryo, password = a Couryo API key with the send scope, and a sender email on a domain verified in Couryo.
Does this work for Bolt?
Yes, when the Bolt app uses your own Supabase project for sign-in: the SMTP goes in the same place in the Supabase dashboard, and the prompt works in the Bolt chat.
My project uses Lovable's built-in backend. Does this apply?
No. On the built-in backend, Lovable sends the sign-in emails itself. This path is for projects connected to a Supabase project of your own.
How much does it cost?
The Free plan has 3,000 emails a month, up to 100 a day, and is free forever. Pro is $19 a month for 50,000 emails.
Can I test before going live?
Yes. Use a ck_test_ key as the SMTP password: Couryo captures the email and shows it in the panel with the link, and delivers nothing. Switch to the ck_live_ key when the flow is right.

Make the next sign-up email arrive

Create a free account and get the key

3,000 emails a month free. No card to start.