Node - nodemailer 邮件相关库
nodemailer 是一个简单易用的 Node.js 邮件发送组件Github 项目地址为https://github.com/andris9/Nodemailerbilibili video: linkconstnodemailerrequire(nodemailer);consttransporternodemailer.createTransport({host:smtp.163.com,secureConnection:true,port:465,secure:true,auth:{user:xxx_some163.com,pass:MQQVMSWLNHNXUPAT}});constmailOptions{from:xxx_some163.com,to:632862998qq.com,subject:subject,// text: haha,html:b stylecolor: redhaha/b};transporter.sendMail(mailOptions,(err,info){if(err){console.log(err);}else{console.log(邮件发送info.response);}})设置邮件选项from指定发件人地址或名称。可以是字符串格式(如 “senderexample.com”),也可以是对象格式(如 { name: “Sender Name”, address: “senderexample.com” })transporter.sendMail({from:senderexample.com});transporter.sendMail({from:{name:Sender Name,address:senderexample.com}});to指定收件人地址或名称,可以是字符串或数组格式。与 from 属性类似,也支持对象格式transporter.sendMail({to:recipientexample.com});transporter.sendMail({to:[recipient1example.com,recipient2example.com]});transporter.sendMail({to:[{name:Recipient 1,address:recipient1example.com},{name:Recipient 2,address:recipient2example.com}]});cc指定抄送收件人,格式与 to 属性相同transporter.sendMail({to:primaryexample.com,cc:ccexample.com});bcc指定密送收件人,格式与 to 属性相同transporter.sendMail({to:primaryexample.com,bcc:bccexample.com});subject指定邮件主题transporter.sendMail({subject:Hello from Nodemailer});text指定纯文本格式的邮件内容transporter.sendMail({text:This is the body of the email in plain text.});html指定 HTML 格式的邮件内容transporter.sendMail({html:h1This is the body of the email in HTML/h1});attachments添加附件,可以是文件路径、URL 链接或 base64 编码数据transporter.sendMail({attachments:[{filename:file.pdf,path:./path/to/file.pdf},{filename:image.png,url:https://example.com/image.png},{filename:banana.png,content:iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///l2Z/dAAAAM0lEQVR4nGP4/5/h/1G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC,encoding:base64}]});encoding指定邮件内容的编码格式,默认为‘utf-8’transporter.sendMail({text:This is the body of the email in plain text.,encoding:iso-8859-1});priority设置邮件优先级,可选值为‘low’、‘normal’(默认)或 ‘high’transporter.sendMail({priority:high});headers添加自定义的邮件头信息transporter.sendMail({headers:{X-Laziness-level:1000}});几种 nodemailer 使用技巧发送 HTML 格式邮件使用 html 属性设置 HTML 格式的邮件内容支持富文本、图片和超链接等内容transporter.sendMail({from:senderexample.com,to:recipientexample.com,subject:这是一封 HTML 格式的邮件,html:h1这是标题/h1p这是正文内容/pimg srccid:uniquenodemailer.com /});发送附件使用 attachments 属性添加附件支持本地文件、URL 链接和 base64 编码数据transporter.sendMail({from:senderexample.com,to:recipientexample.com,subject:这是一封带附件的邮件,text:邮件内容,attachments:[{filename:file.pdf,path:./path/to/file.pdf},{filename:image.png,cid:uniquenodemailer.com,contentType:image/png,content:fs.createReadStream(./path/to/image.png)}]});发送多重邮件: 使用 sendMail() 方法可以一次发送多封邮件,通过循环或者 Promise.all() 的方式来实现constmailOptions[{from:senderexample.com,to:recipient1example.com,subject:第一封邮件,text:这是第一封邮件的内容},{from:senderexample.com,to:recipient2example.com,subject:第二封邮件,text:这是第二封邮件的内容}];Promise.all(mailOptions.map(optiontransporter.sendMail(option))).then(infoconsole.log(所有邮件发送成功)).catch(errorconsole.error(邮件发送失败:,error));设置邮件模板: 将邮件内容抽离到独立的模板文件中,可以提高邮件内容的可维护性和可重用性。可以使用 Handlebars、Pug 或者 ejs 等模板引擎来渲染模板consthbsrequire(nodemailer-express-handlebars);transporter.use(compile,hbs({viewPath:path/to/email-templates,extName:.hbs}));transporter.sendMail({from:senderexample.com,to:recipientexample.com,subject:这是一封模板邮件,template:email-template,context:{username:John Doe,message:这是模板邮件的内容}});![请添加图片描述](https://i-blog.csdnimg.cn/direct/f7e5187adc3342908a6a3b2ff8551f9a.png发送邮件预览: 通过设置 preview: true 可以在发送邮件前预览邮件内容,这对于调试和测试非常有帮助transporter.sendMail({from:senderexample.com,to:recipientexample.com,subject:这是一封预览邮件,text:这是邮件内容,preview:true});

相关新闻

单细胞RNA测序解析乳腺上皮细胞多样性与乳腺癌风险关联

单细胞RNA测序解析乳腺上皮细胞多样性与乳腺癌风险关联

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 3:55:29 阅读更多 →
基于MP2642GR-Z与PIC18F86J50的储能电池被动均衡方案设计与实现

基于MP2642GR-Z与PIC18F86J50的储能电池被动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 3:54:59 阅读更多 →
双节锂电池主动均衡设计:MP2642GR-Z与PIC18F46K42协同方案

双节锂电池主动均衡设计:MP2642GR-Z与PIC18F46K42协同方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 3:55:42 阅读更多 →

最新新闻

C# .NetCore Swagger ISchemaFilter Long 转 String 防精度丢失

C# .NetCore Swagger ISchemaFilter Long 转 String 防精度丢失

目录 解决方案 方法1:使用 SchemaFilter ‌1、创建自定义 SchemaFilter‌ ‌2、在 Swagger 配置中使用该 Filter‌ 方法2:使用 OperationFilter 或 DocumentFilter 1、‌创建自定义 OperationFilter 2、在 Swagger 配置中使用该 Filter 总结 如果…

2026/10/18 3:55:22 阅读更多 →
GLM-Turbo(龙虾模型)API接入指南:Python调用、参数调优与实战

GLM-Turbo(龙虾模型)API接入指南:Python调用、参数调优与实战

最近AI圈里有个很热的称呼叫“龙虾模型”,对应的其实就是GLM-Turbo这个系列。很多人一听到这名字就懵,甚至以为是哪个海鲜行业的图像识别模型,但实际它是一个大语言模型,主打的是中文对话、写作、代码生成和知识问答。我这阵子正好…

2026/10/18 3:55:22 阅读更多 →
iOS WebRTC示例解析:从信令到渲染跑通音视频通话链路

iOS WebRTC示例解析:从信令到渲染跑通音视频通话链路

简介:面向iOS开发者的WebRTC集成示例工程,基于Objective-C实现同类应用间的实时音视频通话,适合希望掌握WebRTC核心流程与原生设备适配的移动端工程师入门参考。压缩包共24个文件,包含7个m源码、5个h头文件、3个plist配置&#xf…

2026/10/18 3:55:22 阅读更多 →
Play Integrity Fix 实战教程:如何让你的 Android 设备重新通过完整性检测

Play Integrity Fix 实战教程:如何让你的 Android 设备重新通过完整性检测

Play Integrity Fix 实战教程:如何让你的 Android 设备重新通过完整性检测 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 银行 App 一打开就闪退&am…

2026/10/18 3:55:22 阅读更多 →
Spring AI集成大模型:Java开发者最佳实践指南

Spring AI集成大模型:Java开发者最佳实践指南

Spring AI:Java开发者的人工智能集成利器先说一个这两年技术圈里特别明显的变化:以前说到AI开发,大家默认是Python的天下,Java程序员只能站在旁边看热闹,顶多通过HTTP接口调一下别人封装好的服务。但从2024年开始&…

2026/10/18 3:55:22 阅读更多 →
SpringBoot3断代升级实战:从零搭建到部署的完整指南

SpringBoot3断代升级实战:从零搭建到部署的完整指南

前两周帮某电商团队做技术迁移评审,对方项目经理一上来就问:能不能在 SpringBoot2.7 基础上直接改版本号升到 3?我当时就告诉他:这可不是改一行版本号的事。编译直接红一片,javax消失,Tomcat行为变了&#…

2026/10/18 3:54:22 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →