Vue Email

Learn how to use Vue Email to build beautiful email templates

You can integrate Novu Framework with Vue Email in a few simple steps. This guide will walk you through the process of creating a new email template using Vue Email and Nuxt.

For a Quickstart Boilerplate project using Nuxt.js, and Vue Email, check out the Vue Email Starter repository

Quickstart

Install Vue.Email components
npm install @vue-email/components
Create templates folder

Create a new folder called emails in your src folder.

Update nuxt.config.ts File
export default defineNuxtConfig({
    build: {
        transpile: ['@vue/email'],
    },
    nitro: {
        esbuild: {
            options: {
                target: 'esnext',
            },
        },
    },
});
Write your email
<script setup lang="ts">
import { VueEmail, Button, Container, Head, Html, Preview } from '@vue-email/components';
 
defineProps<{
    name: string;
}>();
</script>
 
<template>
    <VueEmail>
        <Html>
            <Head />
            <Preview>Welcome to Vue Email</Preview>
            <Container>
                <h1>Welcome, {{ name }}!</h1>
                <p>Thanks for trying Vue Email. We're thrilled to have you on board.</p>
            </Container>
        </Html>
    </VueEmail>
</template>
Write your workflow
import { workflow } from '@novu/framework';
import { renderEmail } from './emails/test-email';
import { z } from 'zod';
 
export const testWorkflow = workflow('test-workflow', async ({ step, payload }) => {
    await step.email('send-email', async (controls) => {
        return {
            subject: controls.subject,
            body: renderEmail(payload.userName),
        };
    },
    {
        controlSchema: z.object({
            subject: z.string().default('A Successful Test on Novu from {{userName}}'),
        }),
    });
}, {
    payloadSchema: z.object({
        userName: z.string().default('John Doe'),
    }),
});

Learn More

To learn more, refer to Vue Email documentation.

On this page