首页 web前端 js教程 在 Nuxt 中发送电子邮件 我如何在 SaaS 样板中处理电子邮件

在 Nuxt 中发送电子邮件 我如何在 SaaS 样板中处理电子邮件

Dec 01, 2024 am 11:45 AM

Sending Emails in Nuxt How I Handle Emails in My SaaS Boilerplate

如果您正在 Nuxt 3 中构建任何严肃的东西,您将需要发送电子邮件。
这是我的设置,可让您在 Resend、SendGrid 或任何其他提供程序之间切换,而无需重写代码。

设置

  • AdonisJS Mail(我让它在 AdonisJS 之外工作,因此它可以与任何 JS 后端一起工作)
  • 用于模板的 Vue 电子邮件
  • 可与任何电子邮件提供商合作(Resend、AWS SES、Mailgun、Sparkpost、Brevo、自定义 SMTP)

基本配置

const generateMailer = async () => {
  const mailer = await generateMailer({
    default: "resend",
    from: {
      address: "hi@saas-boilerplate.dev",
      name: "SaaS Boilerplate",
    },
    mailers: {
      resend: transports.resend({
        key: process.env.RESEND_API_KEY || "",
        baseUrl: "https://api.resend.com",
      }),
      // Easy to add more providers!
      sendgrid: transports.sendgrid({
        key: process.env.SENDGRID_API_KEY || "",
      })
    },
  });

  return mailer;
};
登录后复制

使用 Vue Email 的电子邮件模板

这是一个简单的魔术链接电子邮件模板:

<template>
  <Html>
    <Body>
      <Container>
        <Heading>Sign In to Your Account</Heading>
        <Text>Hi {{ username }},</Text>
        <Text>Click the button below to sign in:</Text>
        <Section>
          <Button :href="signInLink">Sign In</Button>
        </Section>
        <Text>
          Or copy this link: 
          <Link :href="signInLink">{{ signInLink }}</Link>
        </Text>
        <Hr />
        <Text>This link expires in 1 hour.</Text>
      </Container>
    </Body>
  </Html>
</template>
<script setup lang="ts">
import {
  Body, Button, Container, Heading,
  Html, Link, Section, Text, Hr
} from "@vue-email/components";

interface Props {
  username?: string;
  signInLink?: string;
}

withDefaults(defineProps<Props>(), {
  username: "User",
  signInLink: "https://app.example.com/sign-in",
});
</script>
登录后复制

发送电子邮件

import MagicLinkSignIn from "~/emails/MagicLinkSignIn.vue";
const mailer = await getMailer();
await mailer.send(async (message) => {
  message
    .to(email)
    .subject("Magic Link Sign In")
    .html(
      await render(MagicLinkSignIn, {
        username: user?.name,
        signInLink: url,
      })
    );
});
登录后复制

AdonisJS Mail 的炫酷功能

AdonisJS Mail 附带了大量我们可以使用的强大功能:

  1. 多种传输支持:只需一行代码即可在电子邮件提供商之间切换
  2. 日历活动:将日历邀请附加到您的电子邮件
  3. 文件附件:轻松附加文件、流或缓冲区
  4. HTML/文本模板:支持 HTML 和纯文本电子邮件

例如,附加日历邀请非常简单:

message.icalEvent((calendar) => {
  calendar.createEvent({
    summary: 'Team Meeting',
    start: DateTime.local().plus({ minutes: 30 }),
    end: DateTime.local().plus({ minutes: 60 }),
  })
});
登录后复制

为什么这个效果很好

  • 随时切换提供商
  • 在 Vue 中编写模板
  • 易于测试
  • 任何 JS 后端中 AdonisJS Mail 的所有功能

自己尝试一下

想了解更多有关 AdonisJS Mail 的功能吗?查看他们的详细文档。

此电子邮件设置是我的 Nuxt SaaS 样板的一部分。

如果您正在构建 SaaS,请检查一下 - 它配备了使用 tRPC 的类型安全 API、企业级 RBAC(基于角色的访问控制)以及身份验证、团队管理和计费等生产就绪功能.

每个功能的构建都与此电子邮件系统一样注重开发人员体验。

以上是在 Nuxt 中发送电子邮件 我如何在 SaaS 样板中处理电子邮件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在JavaScript中替换字符串字符 在JavaScript中替换字符串字符 Mar 11, 2025 am 12:07 AM

在JavaScript中替换字符串字符

自定义Google搜索API设置教程 自定义Google搜索API设置教程 Mar 04, 2025 am 01:06 AM

自定义Google搜索API设置教程

示例颜色json文件 示例颜色json文件 Mar 03, 2025 am 12:35 AM

示例颜色json文件

8令人惊叹的jQuery页面布局插件 8令人惊叹的jQuery页面布局插件 Mar 06, 2025 am 12:48 AM

8令人惊叹的jQuery页面布局插件

10个jQuery语法荧光笔 10个jQuery语法荧光笔 Mar 02, 2025 am 12:32 AM

10个jQuery语法荧光笔

构建您自己的Ajax Web应用程序 构建您自己的Ajax Web应用程序 Mar 09, 2025 am 12:11 AM

构建您自己的Ajax Web应用程序

什么是这个'在JavaScript? 什么是这个'在JavaScript? Mar 04, 2025 am 01:15 AM

什么是这个'在JavaScript?

10 JavaScript和JQuery MVC教程 10 JavaScript和JQuery MVC教程 Mar 02, 2025 am 01:16 AM

10 JavaScript和JQuery MVC教程

See all articles