Back to jobs
Trigger: eventTrigger
Sends four emails in a drip campaign over 30 days, triggered by an event. Emails built using React & Typescript
Integrations:
/src/resendDripCampaign
Marketing
1import { TriggerClient, TriggerContext, eventTrigger } from "@trigger.dev/sdk";2import {3FirstEmail,4MonthLaterEmail,5SecondEmail,6ThirdEmail,7} from "./mocks/reactEmails";8import { Resend } from "@trigger.dev/resend";9import { z } from "zod";1011const client = new TriggerClient({ id: "jobs-showcase" });1213const resend = new Resend({14id: "resend",15apiKey: process.env.RESEND_API_KEY!,16});1718// This job sends a drip campaign using Resend19client.defineJob({20id: "resend-drip-campaign",21name: "Resend: email drip campaign",22version: "1.0.0",23trigger: eventTrigger({24name: "send.drip.campaign",25schema: z.object({26to: z.string(),27// The 'from' email address must be a verified domain in your Resend account.28from: z.string(),29name: z.string(),30}),31}),32integrations: {33resend,34},35run: async (payload, io, ctx) => {36const email1 = {37text: `Hi there, welcome to our community! This is the first email we send you to help you get started.`,38};3940// Email 1, triggered by an event41await io.resend.sendEmail("email-1", {42to: payload.to,43from: payload.from,44subject: `Thanks for joining Acme Inc`,45text: email1.text,46react: <FirstEmail name={payload.name} text={email1.text} />,47});4849await io.wait("wait-1-day", delay(60 * 60 * 24 * 1, ctx));5051const email2 = {52text: `Hi there, welcome to our community! This is the second email we send you to help you get started.`,53};5455// Email 2, triggered after a day56await io.resend.sendEmail("email-2", {57to: payload.to,58from: payload.from,59subject: `Here are some tips to get started`,60text: email2.text,61react: <SecondEmail name={payload.name} text={email2.text} />,62});6364await io.wait("wait-4-days", delay(60 * 60 * 24 * 4, ctx));6566const email3 = {67text: `Hi there, welcome to our community! This is the third email we send you to help you get started.`,68};6970// Email 3, triggered after 5 days71await io.resend.sendEmail("email-3", {72to: payload.to,73from: payload.from,74subject: `Do you have any questions?`,75text: email3.text,76//email 1, triggered by an event77react: <ThirdEmail name={payload.name} text={email3.text} />,78});7980await io.wait("wait-26-days", delay(60 * 60 * 24 * 26, ctx));8182const email4 = {83text: `This is the fourth email designed to re-engage your users after a month.`,84};8586// Email 4, triggered after 30 days87await io.resend.sendEmail("email-4", {88to: payload.to,89from: payload.from,90subject: `How are you getting on with Acme Inc.?`,91text: email4.text,92//email 1, triggered by an event93react: <MonthLaterEmail name={payload.name} text={email4.text} />,94});95},96});9798function delay(seconds: number, context: TriggerContext) {99if (context.environment.type === "DEVELOPMENT" || context.run.isTest) {100return 10;101}102return seconds;103}104105// These lines can be removed if you don't want to use express106import { createExpressServer } from "@trigger.dev/express";107createExpressServer(client);