Guide

Sending Emails

Sending emails from Edge Functions using the Resend API.

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 Zuvo CLI installed.

1. Create Zuvo function

Create a new function locally:

supabase functions new resend

Store the RESEND_API_KEY in your .env file.

2. Edit the handler function

Paste the following code into the index.ts file:

import { withZuvo } 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: withZuvo({ auth: ['user', 'secret'] }, handler) }

3. Deploy and send email

Run function locally:

supabase start
supabase functions serve --no-verify-jwt --env-file .env

The 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 Zuvo:

supabase functions deploy resend --no-verify-jwt

4. Try it yourself

Find the complete example on GitHub.