E-mail versturen vanuit Mastra
TypeScript-agentframework met Zod-validatie — definieer send_email als eerste-klasse Mastra-tool.
Vereisten
- Node.js 20+ en TypeScript 5+
- Wesender-account met API-sleutel
- npm install @mastra/core @wesender/node zod
- Omgevingsvariabelen: WESENDER_API_KEY en OPENAI_API_KEY
Stap 1: Installeer Mastra en de Wesender Node SDK
Voeg de benodigde packages toe. Mastra biedt een TypeScript-native interface voor productie-agents.
npm install @mastra/core @wesender/node zod Stap 2: Definieer de send_email-tool met Zod-schema
Mastra-tools zijn type-safe met Zod-schemadefinities. Parameters worden automatisch gevalideerd voordat de tool wordt uitgevoerd.
import { createTool } from "@mastra/core"
import { Wesender } from "@wesender/node"
import { z } from "zod"
const emailClient = new Wesender(process.env.WESENDER_API_KEY!)
export const sendEmailTool = createTool({
id: "send_email",
description: "Verstuur een e-mail via Wesender",
inputSchema: z.object({
to: z.string().email().describe("E-mailadres van de ontvanger"),
subject: z.string().describe("Onderwerpregel"),
html: z.string().describe("HTML-inhoud van de e-mail"),
}),
execute: async ({ context }) => {
const result = await emailClient.emails.send({
from: "noreply@jouwdomein.nl",
to: context.to,
subject: context.subject,
html: context.html,
})
return { success: true, id: result.id }
},
}) Stap 3: Maak de agent aan
Koppel de tool aan een Mastra-agent. De agent bepaalt op basis van de instructie wanneer send_email wordt aangeroepen.
import { Agent } from "@mastra/core"
import { sendEmailTool } from "./tools"
export const emailAgent = new Agent({
name: "email-agent",
instructions:
"Je bent een assistent die e-mails verstuurt via Wesender. " +
"Gebruik send_email zodra de gebruiker een e-mail wil versturen.",
model: {
provider: "OPEN_AI",
name: "gpt-4o",
toolChoice: "auto",
},
tools: { sendEmailTool },
}) Stap 4: Voer de agent uit
Roep de agent aan met een gebruikersinstructie. Het resultaat bevat het antwoord van de agent plus de tool-aanroepen die zijn uitgevoerd.
const response = await emailAgent.generate([
{ role: "user", content: "Stuur een welkomstmail naar jan@voorbeeld.nl." },
])
console.log(response.text) Volledig voorbeeld
Hier is de volledige implementatie in mastra-email-agent.ts:
import { Agent, createTool } from "@mastra/core"
import { Wesender } from "@wesender/node"
import { z } from "zod"
const emailClient = new Wesender(process.env.WESENDER_API_KEY!)
const sendEmailTool = createTool({
id: "send_email",
description: "Verstuur een e-mail via Wesender",
inputSchema: z.object({
to: z.string().email(),
subject: z.string(),
html: z.string(),
}),
execute: async ({ context }) => {
const result = await emailClient.emails.send({
from: "noreply@jouwdomein.nl",
to: context.to,
subject: context.subject,
html: context.html,
})
return { success: true, id: result.id }
},
})
const emailAgent = new Agent({
name: "email-agent",
instructions:
"Je bent een assistent die e-mails verstuurt via Wesender. " +
"Gebruik send_email zodra de gebruiker dat vraagt.",
model: { provider: "OPEN_AI", name: "gpt-4o", toolChoice: "auto" },
tools: { sendEmailTool },
})
const response = await emailAgent.generate([
{ role: "user", content: "Stuur een welkomstmail naar jan@voorbeeld.nl." },
])
console.log(response.text) Bezorgstatussen via webhooks
Mastra kan bezorg-, bounce- en klachtsignalen ontvangen via webhooks. Configureer een webhook-endpoint in je Mastra-workflow dat POST-verzoeken van Wesender accepteert. Zie Webhooks instellen voor de volledige configuratiestappen en het payload-formaat.
Veelgestelde vragen
Welke LLM-providers ondersteunt Mastra?
Mastra ondersteunt OpenAI, Anthropic, Google Gemini en andere providers via een gestandaardiseerde interface. Je wisselt van provider door model.provider aan te passen, zonder de toollogica te hoeven wijzigen.
Werkt Mastra met een bestaand Express- of Fastify-project?
Ja. Mastra is framework-agnostisch. Importeer de agent en roep generate() aan vanuit elke Node.js-server of serverless functie, zoals een Next.js API-route of een Hono-endpoint.
Hoe log ik e-mail-ID's voor bezorgingscontrole?
Het tool-resultaat bevat { success: true, id: result.id }. Sla dit op in je eigen database of stuur het terug naar de gebruiker. Combineer met Wesender-webhooks voor realtime bezorgingsstatussen.