使用 Node.js 和 163 邮箱发送邮件:从零开始的教程
准备工作
在开始之前,你需要做几件事:
- 安装 Node.js : 如果你还没装,可以去 Node.js 官网 下载安装。
- 安装 Nodemailer: 这是我们用来发送邮件的利器,后面会详细介绍。
- 163 邮箱配置: 你需要一个 163 邮箱账号,并且开启 SMTP 服务,获取授权码。
163 邮箱 SMTP 配置
- 登录你的 163 邮箱(网页版)。
- 进入「设置」->「POP3/SMTP/IMAP」。
- 勾选开启 SMTP 服务,系统会提示你设置一个授权码(不是邮箱密码),记下来,一会儿要用。

动手写代码
好了,准备工作就绪,我们开始写代码吧!
步骤 1: 初始化项目
创建一个新文件夹(比如 email-demo
),然后在终端运行以下命令初始化 Node.js 项目:
bash
mkdir email-demo
cd email-demo
npm init -y
这会生成一个 package.json
文件。
步骤 2: 安装 Nodemailer
在同一目录下,安装 Nodemailer:
bash
npm install nodemailer
步骤 3: 编写发送邮件的代码
新建一个文件,比如 sendEmail.js
,然后输入以下代码:
javascript
const nodemailer = require('nodemailer');
// 配置 SMTP 传输器
const transporter = nodemailer.createTransport({
host: 'smtp.163.com', // 163 邮箱 SMTP 服务器
port: 465, // SSL 端口
secure: true, // 使用 SSL
auth: {
user: '[email protected]', // 你的 163 邮箱地址
pass: 'your_auth_code' // 前面获取的授权码
}
});
// 发送邮件的函数
async function sendMail() {
try {
const info = await transporter.sendMail({
from: '"博主小助手" <[email protected]>', // 发件人显示名和邮箱
to: '[email protected]', // 收件人邮箱
subject: '来自 Node.js 的问候', // 邮件主题
text: '你好!这是一封用 Node.js 发送的测试邮件!', // 纯文本内容
html: '<p>你好!这是一封用 <b>Node.js</b> 发送的测试邮件!</p>' // HTML 内容
});
console.log('邮件发送成功:', info.response);
} catch (error) {
console.log('邮件发送失败:', error);
}
}
// 执行发送
sendMail();
代码解析
- SMTP 配置 :
host
是 163 的 SMTP 服务器地址,port: 465
表示使用 SSL 加密,auth
里填入你的邮箱和授权码。 - 邮件内容 :
from
是发件人,to
是收件人,subject
是主题,text
和html
分别定义纯文本和 HTML 格式的邮件内容。 - 异步发送 : 使用
async/await
确保邮件发送过程清晰且易于处理错误。
步骤 4: 运行代码
在终端运行:
bash
node sendEmail.js
如果一切正常,你会看到"邮件发送成功"的消息,收件人也会收到邮件!
加点料:发送验证码
假如你想发送验证码(比如注册验证),可以稍微改一下代码:
javascript
const nodemailer = require('nodemailer');
// 生成 6 位验证码
function generateCode() {
return Math.floor(100000 + Math.random() * 900000).toString();
}
const transporter = nodemailer.createTransport({
host: 'smtp.163.com',
port: 465,
secure: true,
auth: {
user: '[email protected]',
pass: 'your_auth_code'
}
});
async function sendVerificationEmail(toEmail) {
const code = generateCode();
try {
const info = await transporter.sendMail({
from: '"验证码服务" <[email protected]>',
to: toEmail,
subject: '你的验证码',
html: `
<h2>验证码</h2>
<p>你的验证码是:<strong style="color: #ff4d4f;">${code}</strong></p>
<p>5 分钟内有效,请尽快使用!</p>
`
});
console.log('验证码邮件发送成功:', info.response);
return code; // 返回验证码用于后续验证
} catch (error) {
console.log('发送失败:', error);
return null;
}
}
// 测试发送
(async () => {
const result = await sendVerificationEmail('[email protected]');
if (result) {
console.log('生成的验证码:', result);
}
})();
运行后,收件人会收到一个带验证码的邮件,控制台也会显示生成的验证码。
注意事项
-
授权码安全 : 不要把邮箱和授权码直接写在代码里,建议用环境变量(比如
dotenv
包)管理。-
安装
dotenv
:npm install dotenv
-
创建
.env
文件:[email protected] EMAIL_PASS=your_auth_code
-
修改代码:
javascriptrequire('dotenv').config(); const transporter = nodemailer.createTransport({ host: 'smtp.163.com', port: 465, secure: true, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS } });
-
-
发送频率: 163 邮箱有发送限制,大量发送可能被暂时封禁,建议用于测试或小规模应用。
-
错误排查: 如果发送失败,检查邮箱、授权码是否正确,或者网络是否被防火墙拦截。
总结
通过 Node.js 和 Nodemailer,我们可以轻松利用 163 邮箱的 SMTP 服务发送邮件。无论是简单的测试邮件,还是带验证码的动态邮件,这个方法都非常实用。希望这篇教程能帮到你,快去试试吧!有问题欢迎留言交流~