如何用Node.js发送邮件:一步一步教你实现
精彩
使用 Node.js、Nodemailer 和电子邮件 API 一步一步教你如何发送电子邮件的教程这张照片由Solen Feyissa在Unsplash拍摄。
电子邮件仍然是应用程序与用户沟通的基础。不论是初创型SaaS平台、电子商务网站,还是社区论坛,能够发送程序化的电子邮件对于创造用户喜欢的体验至关重要。
看看这些电子邮件必不可少的常见情况:
- 欢迎新用户,并引导他们了解入门指南
- 通过确认链接验证用户身份
- 提醒用户有关账户活动或安全注意事项
- 发送订单确认信息和发货更新通知
- 发送密码重置链接邮件
- 发送新闻通讯和营销内容
在这篇指南里,我将向你展示如何为你的 Node.js 应用添加企业级别的邮件功能。
实际上,在 Node.js 中发送电子邮件主要有两种方式:使用像 Nodemailer 这样的 SMTP 服务,或者利用 邮件 API,后者更适合于需要高送达率、高级分析或处理大量邮件的应用场景,提供更强大的解决方案。
那我们就开始吧!
先装一下 Node.js首先,确保你安装了Node.js。如果还没安装,可以从nodejs.org下载。
创建一个新的项目。
// 创建一个名为 email-sender 的目录
mkdir email-sender
// 进入 email-sender 目录
cd email-sender
// 使用 npm 初始化项目并使用默认配置
npm init -y
使用 Nodemailer 通过 SMTP 发送邮件(选项 1)
Nodemailer 是一个非常流行的 Node.js 库,用于通过 SMTP 发送邮件。它易于配置,并且可以与大多数电子邮件服务提供商一起使用。让我们来看看使用 Nodemailer 发送邮件的关键步骤。
1. 安装Nodemailer插件首先,在你的项目里安装Nodemailer。
运行 npm install nodemailer
命令来安装nodemailer
首先,在你的脚本中导入Nodemailer.
const nodemailer = require("nodemailer"); // 引入nodemailer模块
接下来,我们创建一个 传输器(Transporter) ,该传输器负责处理电子邮件的投递过程。传输器包含了你所使用的SMTP服务的相关信息和认证凭证。
const transporter = nodemailer.createTransport({
service: "gmail", // 可以换成其他的 SMTP 服务提供商
auth: {
user: "your-email@gmail.com",
pass: "你的应用专用密码", // 使用的是应用专用密码,而不是你的主密码
},
});
注意: Gmail 会阻止使用纯文本密码的自动化登录,除非你开启“不安全应用的访问权限”或使用一个 应用密码(如果你启用了两步验证功能,则必须使用)。为了更好地安全性和可靠性,Google 推荐使用 OAuth2 方式,尽管它需要一些额外的配置。
3., 设置电子邮件选项现在,请填写电子邮件的发件人邮箱、收件人邮箱、主题和邮件内容。
const mailOptions = {
from: "your-email@gmail.com",
to: "recipient@example.com",
subject: "来自Node.js的消息",
text: "这是Node.js通过Nodemailer发送的一封测试邮件。",
};
四. 发送电子邮件
最后,调用 transporter.sendMail()
这个方法发送邮件,
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error("邮件发送失败:", error);
} else {
console.log("邮件发送成功:", info.response);
}
});
如果所有设置都正确,你应该会在终端看到一条成功的消息,邮件也会出现在收件人的邮箱里。
完整的代码如下:
// send-email.js
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: "your-email@gmail.com",
pass: "your-app-password",
},
});
const mailOptions = {
from: "your-email@gmail.com",
to: "recipient@example.com",
subject: "来自 Node.js 的消息",
text: "这是一封测试邮件,使用 Nodemailer 从 Node.js 发送的。",
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error("发送邮件时出错:", error);
} else {
console.log("邮件已发送:", info.response);
}
});
缺什么?
虽然使用 Nodemailer 配合 Gmail(或其他 SMTP 服务提供商)发送邮件很快捷,但也有一些限制:
- 送达问题 — 通过个人 Gmail 账户发送的邮件更可能被归类为垃圾邮件,特别是批量消息。
- 发送限制 — 每天的发送限制为,免费的 Gmail 账户为 500 个收件人,而 Google Workspace 账户为 2,000 个收件人。
- 安全限制 — Gmail 可能会阻止自动化登录,需要使用应用密码或 OAuth2 认证才能可靠地工作。
- 强制使用发件人地址 — Gmail 会强制使用已验证的邮件地址作为发件人,因此你不能设置自定义‘发件人’地址。
为了更可靠和可扩展的电子邮件发送,使用专用的邮件 API 通常是更好的选择。接下来,我们将看看如何使用邮件 API 发送邮件。
选项 2:通过电子邮件API发送电子邮件SMTP 是为另一个时代设计的——在那个时候,邮件是手动发送的,而不是通过编程大规模发送。如果你曾经因为 SMTP 配置问题、认证错误或完全没有透明度的限流而感到困扰过,你就会明白这种感觉有多让人烦躁。
电子邮件 API 消除这些烦恼。你不必担心基础设施的问题,而会得到一个既简洁又适合开发者和营销人员使用的解决方案,这个方案确实能用。
我们将使用Notify,这是一个快速、简单且可靠的电子邮件API,让你能够轻松地通过代码发送电子邮件。
直接从你的代码发送事务邮件,notify.cx就是最好的选择在开始之前,你需要从 Notify 获取一个 API密钥。为此,访问 Notify 网站,注册或登录你的 Notify 账户,并导航到 仪表盘。从那里,进入 凭证 部分,复制你的 API密钥——我们会在脚本中用到这个密钥。
我们现在可以开始编写代码了。
1. 安装 SDK,开始吧!首先,您需要使用您喜欢的包管理工具安装 Notify Node.js SDK(例如 npm 或 yarn),然后按照说明进行操作。
# npm
使用 npm 安装 notifycx 包
npm install notifycx
# yarn
使用 yarn 安装 notifycx 包
yarn add notifycx
# pnpm
使用 pnpm 安装 notifycx 包
pnpm add notifycx
2. 设置好并发送电子邮件
现在,创建一个Node.js脚本来发送邮件。首先,导入Notify,并配置API密钥(将NOTIFY_API_KEY
替换为之前保存的API密钥)。
import Notify from "notifycx"; // 从 "notifycx" 导入 Notify 模块
import dotenv from "dotenv"; // 从 "dotenv" 导入 dotenv 模块,用于加载环境变量
dotenv.config(); // 加载 .env 文件配置
const notify = new Notify(process.env.NOTIFY_API_KEY); // 使用环境变量中的 NOTIFY_API_KEY 创建一个新的 Notify 实例
然后,编写并发送邮件:
// 发送电子邮件函数是异步的
async function 发送电子邮件() {
const 响应 = await 邮件服务.sendEmail({
to: "john@example.com",
subject: "你好,世界!",
name: "约翰·多",
message: "邮件内容如下",
});
}
发送电子邮件();
提示: message
字段支持纯文本和 HTML。因此,你可以根据需要添加样式、链接或图片。
将此文件保存为 send-email.js
,然后运行它。
node send-email.js
这里运行一个名为 send-email.js
的JavaScript脚本,使用Node.js环境。
就这样。要确认邮件是否已发出,你可以去仪表板的Analytics部分查看。在那里,你可以跟踪邮件的送达和打开情况。
完整代码: // 发送邮件的脚本
import Notify from "notifycx";
import dotenv from "dotenv";
dotenv.config(); // 加载环境变量配置
const notify = new Notify(process.env.NOTIFY_API_KEY);
async function sendEmail() {
const response = await notify.sendEmail({
to: "john@example.com",
subject: "Hello world",
name: "John Doe",
message: "Your email content here",
});
console.log(response); // 控制台输出响应
}
sendEmail();
why使用电子邮件 API?
虽然 SMTP 可以用于基本的邮件发送,但像 Notify 这样的邮件 API 提供了多个优势,使其成为大多数应用的更好选择:
- 更简单的配置 — 无需配置SMTP设置或处理应用程序密码或OAuth等认证障碍。
- 更好的送达率 — 基于API的发送经过优化,可以减少垃圾邮件过滤并提高邮件到达率。如果你自己配置SMTP,邮件往往会被标记为垃圾邮件。
- 轻松的邮件模板 — 手动编写HTML邮件非常麻烦。Notify内置的所见即所得模板编辑器让你能够创建和自定义邮件,并使用动态元素进行个性化设置。
- 可扩展性 — 可以处理更高的邮件量,而无需担心SMTP速率限制。
- 跟踪和分析 — SMTP是一个黑盒子。你不知道邮件发送后的情况。使用Notify服务,你可以从仪表板监控邮件送达状态、打开率和其他关键指标。
- 灵活集成 — 清晰的API和SDK意味着你可以用几行代码从任何技术栈中发送邮件。
对于生产环境的应用来说,使用邮件 API 通常比基于传统 SMTP 的发送更可靠和可扩展。虽然一些邮件 API 可能会比较贵,Notify 提供了一个包含每月 5,000 封邮件的免费层级,使之成为周末小项目、初创公司起步时或测试的理想选择。
结束本文将介绍如何使用Node.js发送电子邮件,介绍如何利用传统SMTP协议通过Nodemailer发送邮件,以及采用更现代的电子邮件API方法等技术。
虽然 SMTP 操作简单且适用于简单的情况,但它也存在身份验证难题、速率限制问题以及潜在投递困难。
使用一个电子邮件API提供了一个更可扩展和可靠的替代选择,省去了手动配置SMTP的麻烦,同时提供了更好的追踪和定制选项。尽管有许多这样的API可供选择,如果你正在寻找一个方便开发者使用、自带分析工具和直观模板编辑器的解决方案,Notify是不错的选择,它提供每月5,000封免费邮件。
最后,合适的选择要看你的需求——是需要快速的SMTP集成,还是需要一个为生产应用提供稳定邮件发送的解决方案。
共同学习,写下你的评论
评论加载中...
作者其他优质文章