Sending Emails
Sending emails from Edge Functions using the Resend API.
Prerequisites#
To get the most out of this guide, you’ll need to:
Make sure you have the latest version of the Supabase CLI installed.
1. Create Supabase function#
Create a new function locally:
supabase functions new resendStore the RESEND_API_KEY in your .env file.
2. Edit the handler function#
Paste the following code into the index.ts file:
import { withSupabase } from 'npm:@supabase/server@^1'const RESEND_API_KEY = Deno.env.get('RESEND_API_KEY')const handler = async (_request: Request): Promise<Response> => { const res = await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${RESEND_API_KEY}`, }, body: JSON.stringify({ from: 'onboarding@resend.dev', to: 'delivered@resend.dev', subject: 'hello world', html: '<strong>it works!</strong>', }), }) const data = await res.json() return Response.json(data)}export default { fetch: withSupabase({ auth: ['user', 'secret'] }, handler) }3. Deploy and send email#
Run function locally:
supabase startsupabase functions serve --no-verify-jwt --env-file .envThe function accepts a signed-in user's JWT or a secret key, so it can be triggered from your app (via supabase.functions.invoke) or from a database function. Test it locally with a secret key:
curl -i --request POST 'http://localhost:54321/functions/v1/resend' \ --header 'apikey: <SUPABASE_SECRET_KEY>'Deploy function to Supabase:
supabase functions deploy resend --no-verify-jwtWhen you deploy to Supabase, make sure that your RESEND_API_KEY is set in Edge Function Secrets Management
4. Try it yourself#
Find the complete example on GitHub.