Integrating AutoSend transactional emails into Convex applications using @autosend/convex

We are building our app on Convex reactive backend. What is the recommended way to handle transactional emails in Convex without running custom Redis/Bull queue workers for retries and webhook delivery tracking?

AutoSend provides an official drop-in Convex component (@autosend/convex) that handles queueing, deterministic idempotency, exponential backoff retries, and webhook verification natively inside your Convex deployment.

Quick Setup:

  1. Install Package:
    npm install @autosend/convex convex
    
  2. Register Component in convex/convex.config.ts:
    import { defineApp } from "convex/server";
    import autosend from "@autosend/convex/convex.config.js";
    
    const app = defineApp();
    app.use(autosend, { name: "autosend" });
    export default app;
    
  3. Initialize Client in convex/email.ts:
    import { AutoSend } from "@autosend/convex";
    import { components } from "./_generated/api";
    
    export const autosend = new AutoSend(components.autosend);
    
  4. Trigger Send from Convex Mutation:
    import { mutation } from "./_generated/server";
    import { autosend } from "./email";
    
    export const sendWelcome = mutation({
      args: { email: v.string(), name: v.string() },
      handler: async (ctx, args) => {
        await autosend.sendEmail(ctx, {
          from: "hello@yourdomain.com",
          to: args.email,
          subject: "Welcome aboard!",
          html: `<p>Hi ${args.name}, welcome!</p>`,
        });
      },
    });
    

Relevant Documentation