姚利锋
姚利锋
首页博客片段项目服务关于
☕
❤️
目录
  • 无目录
返回片段

发布于  2025 年 4 月 17 日,星期四

使用Nodemailer发送邮件Gmail配置

Nodemailer在Node.js环境中通过Gmail发送邮件的具体配置步骤,包括如何设置SMTP服务器、生成应用专用密码或启用OAuth2认证。涉及Gmail安全设置调整,如允许低安全性应用访问或开启两步验证。需配置Nodemailer的传输对象,包含服务类型、主机地址、端口号、安全协议及用户凭证等参数。常见问题解决方案如处理认证错误、端口被屏蔽或发送限制。代码示例展示基础邮件发送实现,附件添加及HTML内容支持。注意事项强调避免将敏感信息硬编码,推荐使用环境变量存储凭证。性能优化建议涉及连接池管理和错误重试机制。

第一步安装 nodemailer

npm install nodemailer
复制代码

第二步 创建Google 项目

2.1打开下面地址

已启用的 API 和服务https://console.cloud.google.com/projectselector2/apis/dashboard?supportedpurview=project&pli=1

2.2创建新项目

2.3输入项目信息

2.4创建完成后启用API

2.5输入 gmail 搜索并选择 Gmail API

2.6点击启用API

2.7点击创建凭据

2.8创建Oauth凭据

重定向URL 中输入 https://developers.google.com/oauthplaygroundhttps://developers.google.com/oauthplayground

2.9创建完成

2.10然后点击凭据Tab,并编辑刚创建的凭据

2.11复制客户端ID与客户端密钥供后续使用

2.12点击 OAuth 同意屏幕添加测试用户

2.13将当前用户加入

2.14创建完成后用户列表中将会看到

2.15打开地址 https://developers.google.com/oauthplaygroundhttps://developers.google.com/oauthplayground

配置前面复制的客户端ID与客户端密钥,然后选择gmail Api 并点击Authorize APIs 按钮

2.16然后选择当前登陆的账号 以获取授权

账号授权时如果出现 这种提示 则是因为 创建的应用未设置测试用户,将当前用户加入测试用户列表中即可(步骤:2.13,2.14,2.15)

2.17获取Token

因为这只是测试 App 所以会有提示,点击继续即可

2.18同意授权

2.19同意授权后会重新回到页面 https://developers.google.com/oauthplaygroundhttps://developers.google.com/oauthplayground 点击按钮获取Token

2.20判断右侧出现 HTTP/1.1 200 OK 且 相关信息都已显示,复制左侧 RefreshToken 与 Access token

到了这一步我们就创建完成 所需要的信息 下一步就进行代码编写

第三步 编写邮件代码

const express = require('express');const nodemailer = require('nodemailer');const app = express();const port = 3333;app.get('/', (req, res) => {    const transporter = nodemailer.createTransport({        host: 'smtp.gmail.com',        port: 465,        secure: true,        auth: {            type: 'OAuth2',            user: 'test@gmail.com',            clientId: '344551453406-rqk1a539bljgc9ldt9gv2kfbv3ud7l9u.apps.googleusercontent.com',            clientSecret: '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',            refreshToken:                '1//0412Uzn4225S4CgYIARAAGAQSNwF-L9IrZNMaQswZxgQ_fvrrS70UAH9_e03DP7_c7MJCenpjY4WZPYagEP31LQ-SRUKuhe86zq8',            accessToken:                'ya29.A0AVA9y1sQzoQjsd1wjcHGa5RYik1Bm1yXMWdMx3_Ddwyxwn6sA96sioaCSOVo4UaztU2tTNP4M36okz4JzTyQpR7hz3rpmt3jEGGO_hIwto52m8qn2_sPfXVIVW0ur1otQnMpToD5_T_fkiDGhPdG_OIGNhOyYUNnWUtBVEFTQVRBU0ZRRTY1ZHI4VkpkVlBFZEdBQnpoeVVkbzQta2FJQQ0163',        },    });    transporter.sendMail({        from: 'test@gmail.com',        to: 'test@qq.com',        subject: 'Gmail 测试邮件',        html: 'Gmail 测试邮件 内容',    });    res.send('Hello World!');});app.listen(port, () => {    console.log(`Example app listening on port ${port}`);});
复制代码

运行 文件 node app.js 并访问 localhost:3333 过一会我们就能收到 Gmail 发送的邮件了

第四步 定时刷新Token

async function refreshToken() {    const res = await ctx.curl('https://accounts.google.com/o/oauth2/token', {        method: 'POST',        contentType: 'json',        dataType: 'json',        data: {            client_id: clientId,            client_secret: clientSecret,            refresh_token: refreshToken,            grant_type: 'refresh_token',        },    });    const { access_token } = res.data || {};    return access_token;}// Example usage:// refreshToken().then(token => console.log(token));
复制代码
# Node.js# JavaScript
返回片段