基于nodemailer实现邮件发送、附件发送、多人发送

news2025/2/4 15:59:43

文章目录

    • 1、QQ邮箱如何设置授权码
    • 2、具体代码

1、QQ邮箱如何设置授权码

QQ邮箱SMTP/IMAP服务

1、点击账号与安全

在这里插入图片描述
2、安全设置
在这里插入图片描述
3、设备管理,可以查看有多少个授权码
在这里插入图片描述

2、具体代码

from 这个参数,有两种写法

  1. qq号@qq.com
  2. "姓名"<qq号@qq.com>
  • from :发件人的电子邮件地址
  • to :以逗号分隔的收件人电子邮件地址列表或数组,将显示在“收件人”字段中
  • cc :以逗号分隔的抄送人电子邮件地址列表或数组,将显示在“抄送”字段中。
  • bcc:以逗号分隔的密送人电子邮件地址列表或数组,将显示在“密送”字段中
  • subject :邮件的主题
  • text :纯文本内容
  • html :HTML类型的消息,但是和 text 冲突,后者会覆盖掉前者,
  • attachments:附件的数组,每个附件包含以下属性:
    • filename:附件的文件名。
    • content:附件的内容,可以是 Buffer、流或文件路径。
    • contentType:附件的 MIME 类型。
import nodemailder from "nodemailer";
import Koa from "koa";
import Router from "koa-router";

const transPort = nodemailder.createTransport({
  service: "qq", // 服务商
  host: "smtp.qq.com", // 服务器地址
  auth: {
    pass: "xxxxxxxx", // 密码 或者 授权码
    user: "xxxxx@qq.com", // 邮箱账号
  },
  secure: true, // 加密发送
});

const app = new Koa();
const router = new Router();

// 处理 GET 请求
router.get("/sendMail", async (ctx) => {
  try {
    let { mailText, mailSubject, mainTo } = ctx.request.query;
    console.log(mailText, mailSubject, mainTo);
    let res = await transPort.sendMail({
      to: mainTo, // 发送给谁
      // from: "xxxx@qq.com", // 发送人;这种写法也可以
      from: `"傻瓜"<xxxxx@qq.com>`, // 发送人
      subject: mailSubject, // 主题
      text: mailText, // 内容
      html: `
        <h1>你好,您的邮件已收到!</h1>
        <hr/>
        <p>
            <b>祝:</b><br/>
            &nbsp;&nbsp;&nbsp;&nbsp;身体健康,工作顺利!
        </p>
      `,
      attachments: [
        // 附件
        {
          filename: "image-20231128063900411.png", // 名称
          // content: "hello world", // 文本/ buffer/相对路径/等等
          path: "http:xxxxx/image-20231128063900411.png",
        },
        {
          filename: "测试记事本格式.txt",
          content: "测试文本",
        },
        {
          filename: "测试Buffer.docx",
          content: Buffer.from("word文档,晚上好"),
        },
      ],
    });
    transPort.close();
    console.log("发送成功:");
    ctx.set("Content-Type", "application/json");
    ctx.body = {
      state: "1",
      meg: "发送成功~",
      data: {
        sendMail: res,
      },
    };
    ctx.status = 200;
  } catch (error) {
    console.log(error, "错误信息");
  }
});

app.use(router.routes());

// 启动服务器
app.listen(3000, () => {
  console.log("Server is running on http://localhost:3000");
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1337316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子电气架构——车载ECU刷写工具vFlash简介

电子电气架构——车载ECU刷写工具vFlash简介 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&a…

11、YOLO训练后输出时参数不同的原因分析:

网络输出显示&#xff1a; 训练输出显示&#xff1a; 上述Model Summary显示计算不同的原因共有三点&#xff1a; Layers&#xff1a;可以看到验证时网络层数减少了很多 其中一个原因是因为使用了Fuse前向加速推理方法&#xff0c;将Conv和BN层融合在了一起&#xff0c;具体…

工具系列:TimeGPT_(3)处理假期和特殊日期

日历变量和特殊日期是预测应用中最常见的外生变量类型之一。它们为时间序列的当前状态提供了额外的上下文信息&#xff0c;特别是对于基于窗口的模型&#xff08;如TimeGPT-1&#xff09;而言。这些变量通常包括添加每个观测的月份、周数、日期或小时数的信息。例如&#xff0c…

创建一台可以安装linux系统的虚拟机的流程

1、打开vmware-->点击左上角文件-->新建虚拟机-->自定义 2、默认选择&#xff0c;直接下一步 3、选中稍后安装操作系统&#xff0c;然后下一步 4、选中Linux&#xff0c;然后下拉框选择CentOS7(64位) 5、设置虚拟机名称及存储位置 6、设置虚拟机处理器数量及核心数 7、…

记录汇川:MODBUS TCP-梯形图

H5U的MODBUS通信不需要编写程序&#xff0c;通过组态MODBUS通信配置表&#xff0c;实现数据通信。 Modbus-TCP 主站即Modbus-TCP客户端&#xff0c;通过Modbus-TCP配置&#xff0c;可最多支持同时与31个 Modbus-TCP服务器&#xff08;从站&#xff09;进行通讯。 …

【JavaScript】闭包机制

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

我的数据仓库与数据挖掘期末大作业重置版

文章目录 我的数据仓库与数据挖掘期末大作业重置版准备工作预设定及导入相对应的库库的导入调整 Jupyter Notebook 的预设定调整 MatPlotLib 和 Pandas 的输出设置 任务 1&#xff1a;预测问题数据的保存和读取数据的分析和预处理模型的选择和构建线性回归一元多项式回归 拟合预…

sql_lab之sqli中的堆叠型注入(less-38)

堆叠注入&#xff08;less-38&#xff09; 1.判断注入类型 http://127.0.0.3/less-38/?id1 and 12 -- s 没有回显 http://127.0.0.3/less-38/?id1 and 11 -- s 有回显 则说明是单字节’注入 2.查询字段数 http://127.0.0.3/less-38/?id1 order by 4 -- s 报错 http:/…

ResNet网络分析与demo实例

参考自 up主的b站链接&#xff1a;霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 Fun_机器学习,pytorch图像分类,工具箱-CSDN博客 ResNet 详解 原论文地址 [1512.03385] Deep Residual Learning for Image Recognition (arxiv.org) ResNet 网络是在 …

短视频矩阵系统:赋予用户创造与分享的力量

在如今快节奏的社交网络时代&#xff0c;人们对于信息获取和娱乐方式的需求也逐渐发生了变化。作为当下最受欢迎的短视频平台之一&#xff0c;抖音短视频矩阵系统正以其独特的魅力和吸引力&#xff0c;深深地打动着亿万用户。 抖音短视频矩阵系统是一种基于移动端的短视频分享…

基于STC89C52RC的温湿度显示与按键可调的时钟显示

大学时候的课程设计项目&#xff0c;本人只负责软件设计。 课题摘要 摘 要 温湿度参数的检测已经成为人们日常生产生活中的一个重要的参数指标。温度和湿度是两个最基本的环境参数&#xff0c;人们生活与温湿度息息相关。在工农业生产、环保、科研、化工业、制药业等地方&…

客户跟进没效果?这三招请收好!!

在现代商业环境中&#xff0c;与客户进行有效的跟进至关重要。但是&#xff0c;有时候不论我们多么努力地跟进&#xff0c;却依然无法获得预期的结果。 今天就给大家分享三个高效跟进客户的方法&#xff0c;帮助大家提高效率&#xff01; 首先&#xff0c;了解客户需求是关键…

【MySQL变更】gh-ost原理解读

gh-ost简介 gh-ost是处理MySQL在线表结构变更的工具&#xff0c;与pt-osc 不同&#xff0c;gh-ost不会使用触发器。 gh-ost 可以进行测试&#xff0c;暂停&#xff0c;动态控制和重新配置&#xff0c;审计还有其他许多操作perks。 命名 最初它被命名为gh-osc&#xff1a;Git…

从入门到精通,30天带你学会C++【第九天:排序合集】

Everyday English Never put off what you can do until tomorrow. 今日事&#xff0c;今日毕。 前言 首先跟大家说声抱歉&#xff0c;我已经25天没写博客了&#xff0c;我知道我掉了很多粉丝&#xff0c;但是还有很多人坚持关注着我&#xff0c;在这里我表示感谢…

C++ Qt开发:QSqlDatabase数据库组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QSqlDatabase数据库模块的常用方法及灵活运用…

【软件工程大题】白盒测试

给出一个简单的测试样例,然后再进行白盒测试的讲解 if A and B then action1 if C or D then action2 1.语句覆盖 每个语句执行一次 也就是,样例中的每个语句执行一次,至于ABCD取值,要满足IF条件,让四个语句都执行一次 A and B -> T ⇒ AT …

蓝桥杯的学习规划

c语言基础&#xff1a; Python语言基础 学习路径&#xff1a;画框的要着重学习

2023年教程汇总 | 《小杜的生信笔记》

2023年总结 2023年即将结束&#xff0c;我们即将迎来2024年。2023年&#xff0c;我们做了什么呢&#xff1f;&#xff1f;这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间&#xff0c;单位需要提交2023年工作总结&#xff0c;真的是憋了好久才可以下笔…

【数据结构】无向图的最小生成树(Prime,Kruskal算法)

文章目录 前言一、最小生成树二、Kruskal算法1.方法&#xff1a;2.判断是否成环3.代码实现 三、 Prim算法1.方法&#xff1a;2.代码 四、源码 前言 连通图&#xff1a;在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则称顶点v1与顶点v2是连通的。如果图中任意一对…

医院信息化-6 大模型与医疗

之前写了一系列跟医疗信息化相关的内容&#xff0c;其中有提到人工智能&#xff0c;但是写的都是原先的一些AI算法基础上的医疗应用。现在大模型出现的涌现推理能力确实让人惊讶&#xff0c;并且出现可商用化的可能性&#xff0c;因此最近一年关于大模型在医疗的应用也开始出现…