推荐一个深受独立开发者喜爱的邮件推送服务 Brevo

1,705 阅读4分钟

image.png

背景

之前做了一个 Chrome 扩展,有用户提出的需求需要登陆了才能实现。于是就需要使用邮件服务来发送验证码做注册和找回。其实按照目前的情况,使用个人 163 邮箱配置一下 POP3/SMTP 然后通过 nodemailer 发送足够了。毕竟用户也不多,但是吧 还是想找个更好点的方案 😂。

之前正好看到有其他的开发者推荐过的一个邮件发送服务,Brevo app.brevo.com/ 之前应该也叫做 Sendinblue。试用了一下感觉非常不错,免费 Plan 每天 300 封邮件,简直太香了。所以给大家推荐一下同时记录一下使用的过程,希望可以帮助到有需要的同学。

使用个人邮箱推送邮件的缺点

  • 发送数量限制:大多数个人邮箱都有每日或每小时的发送限制,一旦超出这个限制,邮件可能会被暂停发送或者直接被退回。而且限制通常比专业邮件服务平台要严格,不能满足增长中的用户需求。

  • 反垃圾邮件机制:使用个人邮箱发送大量邮件可能会被邮件服务器标记为垃圾邮件。这不仅会导致邮件无法送达,还可能影响到发送方的信誉,降低邮件投递的成功率。

  • 缺乏专业功能:个人邮箱缺乏营销邮件或交易邮件所需的高级功能,如邮件追踪、自动化工作流、A/B 测试、统计分析等。

  • 邮件可扩展性差:一旦用户量增加,个人邮箱难以支持大量邮件的发送,邮件的可扩展性和服务的可靠性会受到影响,导致用户体验下降。

  • 安全性问题:个人邮箱通常没有针对大规模邮件发送的安全防护措施,例如防止滥用、保护用户数据、合规性等。这可能会带来隐私和安全问题。

个人邮箱配合 nodemailer 发送邮件【不推荐】

这里以 163 邮箱为例,说一下 nodejs 如何用个人邮箱发送邮件。

配置邮箱 POP3/SMTP

  1. 登录 163 邮箱,点击“设置”选择 POP3/SMTP/IMAP 配置项。 image.png

  2. 开启服务,通过验证后复制授权密码。 image.png

image.png

node 安装 nodemailer

pnpm i nodemailer

发送邮件

const nodemailer = require("nodemailer");

// 配置 SMTP 传输服务
const transporter = nodemailer.createTransport({
  host: "smtp.163.com", // 163 邮箱的 SMTP 服务器地址
  port: 465, // 端口号(163 邮箱用的是 465)
  secure: true, // 如果为 true 则使用 SSL 加密
  auth: {
    user: "example@163.com", // 你的 163 邮箱账号
    pass: "***************", // 你的邮箱 SMTP 授权码,而不是邮箱的登录密码
  },
});

// 设置邮件选项
const mailOptions = {
  from: '"酸菜鱼和地锅鸡" <example@163.com>', // 发件人
  to: "username@gmail.com", // 收件人
  subject: "Test Email", // 邮件标题
  text: "Hello world?", // 邮件正文(文本格式)
  html: "<b>Hello world?</b>", // 邮件正文(HTML 格式)
};

// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    return console.log(error);
  }
  console.log("Message sent: %s", info.messageId);
});

使用 Brevo 邮件推送平台【推荐】

使用 Brevo 需要有一个域名或者企业邮箱,这里我使用的是域名,以前在阿里云买的。哪个平台的域名都行,只要能配置域名解析就可以。

注册登录

注册登录没啥说的,填写基本信息就好了,也没有实名认证之类的。

配置 Sender 与 Domain

进入发件人和域名配置页面

image.png

配置域名

这里可以使用子域名,比如 email.baidu.com。记住这个域名,后面要用到。

image.png

添加域名后会生成三条解析配置,分别将其配置在域名解析中。我的是在阿里云购买的域名,需要去阿里云进行配置。

image.png

登录阿里云控制台,解析可能有一点点的延迟,有时需要稍微等几分钟。 image.png

配置发件人

image.png

From name 随便填,没有影响。From email 就是发邮件时用到的邮箱,邮箱名称根据自己的喜好定义,但是服务地址就要跟上面解析的域名保持一致。

获取 api-key

点击右上角的个人名称,进入到配置页面,创建一个 api-key.

image.png

发送邮件

安装 npm 依赖

pnpm i sib-api-v3-sdk

sib-api-v3-sdk 依赖包安装后控制台会提示这个包废弃了不再维护,不过不影响使用。也可以按照 github 使用他们团队开发的新的包 github.com/getbrevo/br…

const SibApiV3Sdk = require("sib-api-v3-sdk");

class Email {
  apiInstance;
  constructor() {
    this.apiInstance = new SibApiV3Sdk.TransactionalEmailsApi();
    SibApiV3Sdk.ApiClient.instance.authentications['api-key'].apiKey =
      process.env.SIB_KEY;
  }

  send() {
    // 定义邮件内容
    const sendSmtpEmail = {
      to: [{ email: '****@****.com', name: 'RecipientName' }], // 直接指定收件人
      sender: {
        email: '****@****.com', // 这个地方替换为在平台配置的 email
        name: 'SenderName',
      },
      subject: 'Test Email',
      htmlContent:
        '<p>Hello, this is a test email sent using Sendinblue API.</p>',
    };

    // 发送邮件
    this.apiInstance.sendTransacEmail(sendSmtpEmail).then(
      (data) => {
        console.log('邮件发送成功: ' + JSON.stringify(data));
      },
      (error) => {
        console.error('邮件发送失败: ', error);
      },
    );
  }
}

const email = new Email()
email()

大功告成,这样就可以通过 nodejs 发送邮件了。如果后期有大量的需求,也可以升级为付费计划。