nodejs:用 nodemailer 发送一封带有附件的邮件

我们将使用 nodemailer 库来发送带有附件的邮件。

首先,确保已经安装了nodemailer。如果没有安装,可以通过
npm install nodemailer 来安装。
cnpm install nodemailer --save
dependencies:
– nodemailer ^7.0.3

步骤:

  1. 引入nodemailer模块。
  2. 创建传输器(transporter)对象,用于发送邮件。需要配置SMTP服务(这里以QQ邮箱为例,也可以使用其他服务)。
  3. 设置邮件选项(mailOptions),包括发件人、收件人、主题、正文以及附件。
  4. 使用 transporter.sendMail 方法发送邮件,并处理回调。

注意:使用QQ邮箱 SMTP 服务需要开启 POP3/SMTP服务,并生成授权码(不是邮箱密码)。


以下是一个使用 Node.js 发送带附件邮件的完整示例,使用 nodemailer 库实现:

// send_email_1.js 发送一封带有附件的邮件
const nodemailer = require('nodemailer');
const path = require('path');// 创建 SMTP 传输器(以QQ邮箱为例,其他邮箱配置类似)
const transporter = nodemailer.createTransport({host: 'smtp.qq.com',     // QQ邮箱SMTP服务器port: 465,               // SSL端口secure: true,            // 使用SSLauth: {user: 'your_email@qq.com', // 替换为你的邮箱pass: 'your_auth_code'     // 替换为邮箱授权码(不是密码)}
});// 邮件配置
const mailOptions = {from: '"发件人名称" <your_email@qq.com>', // 发件人to: 'recipient@example.com',              // 收件人subject: '带附件的测试邮件',               // 邮件主题text: '这是一封包含附件的测试邮件',        // 纯文本正文html: '<b>这是一封包含附件的测试邮件</b>', // HTML正文attachments: [                            // 附件列表{filename: 'document.pdf',             // 附件显示名称path: path.join(__dirname, 'files/document.pdf') // 附件路径},{filename: 'image.png',path: path.join(__dirname, 'files/image.png'),cid: 'unique-image-id' // 用于在HTML中嵌入图片}]
};// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {if (error) {return console.log('发送失败:', error);}console.log('邮件已发送: %s', info.messageId);
});

使用说明:

  1. 安装依赖

    npm install nodemailer
    
  2. 邮箱配置

    • 使用 QQ 邮箱需要开启 SMTP 服务并获取授权码(登录QQ邮箱 → 设置 → 账户 → 开启POP3/SMTP → 生成授权码)
    • 其他邮箱(Gmail、163等)配置参考:
      // Gmail 示例
      host: 'smtp.gmail.com',
      port: 465,
      secure: true,
      auth: {user: 'your@gmail.com',pass: 'your-app-password' // 需使用Google应用专用密码
      }
      
  3. 附件配置

    • filename:收件人看到的文件名
    • path:本地文件路径(绝对路径推荐)
    • cid:用于在HTML内容中引用图片(如 <img src="cid:unique-image-id">
  4. 运行程序

    node send_email_1.js
    

常见问题解决:

  1. 认证失败

    • 确认邮箱服务已开启SMTP
    • 使用授权码而非邮箱密码
    • Gmail需要开启两步验证并创建应用专用密码
  2. 附件大小限制

    • 大多数邮箱服务商限制附件大小(QQ邮箱≤50MB)
    • 超大附件建议使用云存储链接
  3. 安全警告

    • 首次登录可能触发安全警告,需在邮箱中确认
    • Gmail需开启"低安全性应用访问"(不推荐)或使用OAuth2

进阶使用(HTML内容嵌入图片):

<html><body><p>这是一封带图片附件的邮件:</p><!-- 使用 cid 引用附件图片 --><img src="cid:unique-image-id" alt="嵌入图片"></body>
</html>

提示:生产环境建议将邮箱配置存储在环境变量中(使用 dotenv 库),避免敏感信息泄露。

完整文档参考:nodemailer官方文档

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

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

相关文章

Scade 语言概念 - 方程(equation)

在 Scade 6 程序中自定义算子(Operator)的定义、或数据流定义(data_def)的内容中&#xff0c;包含一种基本的语言结构&#xff1a;方程(equation)(注1)。在本篇中&#xff0c;将叙述 Scade 语言方程的文法形式&#xff0c;以及作用。 注1: 对 Scade 中的 equation, 或 equation…

STM32开发,创建线程栈空间大小判断

1. 使用RTOS提供的API函数&#xff08;以FreeRTOS为例&#xff09; 函数原型&#xff1a;UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)功能&#xff1a;获取指定任务堆栈中剩余的最小空间&#xff08;以字为单位&#xff0c;非字节&#xff09;。使用步骤&am…

thinkphp8.1 调用巨量广告API接口,刷新token

1、在mysql中建立表sys_token; CREATE TABLE sys_token (id int UNSIGNED NOT NULL,access_token varchar(50) COLLATE utf8mb4_general_ci NOT NULL,expires_in datetime NOT NULL,refresh_token varchar(50) COLLATE utf8mb4_general_ci NOT NULL,refresh_token_expires_in …

【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目

&#x1f4da;️前言 &#x1f31f; 本期内容亮点&#xff1a;我们将深入解析力扣&#xff08;LeetCode&#xff09;上的几道经典算法题&#xff0c;涵盖不同难度和题型&#xff0c;帮助大家掌握解题思路和代码实现技巧。无论是准备面试还是提升算法能力&#xff0c;这些题解都…

【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程

前言 越狱iPhone之后&#xff0c;一定记得安装一下用于屏蔽更新的描述文件&#xff08;可使用爱思助手&#xff09; 因为即便关闭了自动更新&#xff0c;iPhone仍会在某些时候自动更新系统&#xff0c;导致越狱失效&#xff1b;更为严重的是&#xff0c;更新后的iOS版本可能是…

​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​

—聚酰亚胺/陶瓷基板在5G与航天场景的产业化应用​​ ​​一、极端环境材料体系&#xff1a;突破温域与频率极限​​ ​​聚酰亚胺基板&#xff08;PI&#xff09;的航天级稳定性​​ 猎板在卫星通信PCB中采用真空层压工艺处理聚酰亚胺基材&#xff08;Dk≈10.2&#xff09;&a…

pikachu靶场通关笔记13 XSS关卡09-XSS之href输出

目录 一、href 1、常见取值类型 2、使用示例 3、安全风险 二、源码分析 1、进入靶场 2、代码审计 3、渗透思路 三、渗透实战 1、注入payload1 2、注入payload2 3、注入payload3 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关&#xff09;渗透集合&#xff…

day26-计算机网络-4

1. tcp的11种状态 ss -ant -a 表示看所有状态 -n 表示不将ip解析为主机名 -t 表示tcp 1.1. closed状态&#xff08;客户端、服务端&#xff09; 客户端发起建立连接前的状态服务端启动服务前的状态 1.2. listen状态&#xff08;服务端&#xff09; 服务端软件运行的时候状…

基于autodl部署Cross-Modal-Re-ID-baseline

https://arxiv.org/abs/2001.04193 https://github.com/mangye16/Cross-Modal-Re-ID-baseline/tree/master?tabreadme-ov-file# 需要SYSU-MM01.zip pip install numpy pandas scipy scikit-learn pillow tqdm把SYSU-MM01放到…/Datasets/SYSU-MM01/ori_data下 先运行pytho…

线程安全集合

前置阅读&#xff1a; 数据结构等算法概念 树堆排序 锁相关概念&#xff1a; 锁概念锁实现 队列 Queue 与 Deque 的区别 Queue 是单端队列&#xff0c;只能从一端插入元素&#xff0c;另一端删除元素&#xff0c;实现上一般遵循 先进先出&#xff08;FIFO&#xff09; 规则…

ESP32与STM32

ESP32与STM32深度对比&#xff1a;物联网与嵌入式开发的王者之争 一、核心架构对比 1.1 ESP32 - 无线物联网霸主 // 典型双核架构配置 #include "freertos/FreeRTOS.h" #include "freertos/task.h"void app_main() {// 核心0执行无线通信任务xTaskCreat…

在SpringBoot中使用AWS SDK实现邮箱验证码服务

1.依赖导入&#xff08;maven&#xff09; <dependency><groupId>software.amazon.awssdk</groupId><artifactId>ses</artifactId><version>2.31.46</version></dependency> 2.申请两个key 发件人邮箱需要验证&#xff1a; …

从零到一:Maven 快速入门教程

目录 Maven 简介Maven 是什么为什么使用 Maven&#xff1f; 安装 Maven下载 Maven 配置 Maven解压文件配置本地仓库保存路径配置国内仓库地址 Maven 的核心概念了解 pom.xml 文件坐标依赖范围生命周期compileprovidedruntimetestsystemimport 依赖传递依赖排除依赖循环 继承1. …

Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…

第四讲:类和对象(下)

1. 再探构造函数 • 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅ 式&#xff0c;就是初始化列表&#xff0c;初始化列表的使⽤⽅式是以⼀个冒号开始&#xff0c;接着是⼀个以逗号分隔的数据成 员列表&#xff…

linux 安装mysql8.0;支持国产麒麟,统信uos系统

一&#xff1a;使用我已经改好的mysql linux mysql8.0解压可用&#xff0c;点我下载 也在国产麒麟系统&#xff0c;统信uos系统也测试过&#xff0c;可用&#xff1b; 下载后&#xff0c;上传mysql.tar.gz 然后使用root角色去执行几个命令即可&#xff1b;数据库密码&#xf…

音频剪辑软件少之又少好用

我们平时见到的图片以及视频编辑工具非常多&#xff0c;但是音频剪辑软件却是少之又少&#xff0c;更不用说有没有好用的&#xff0c;今天&#xff0c;给大家带来一款非常专业的音频剪辑软件&#xff0c;而且是会员喔。 软件简介 一款手机号登录即可以享受会员的超专业音频剪…

论文阅读:CLIP:Learning Transferable Visual Models From Natural Language Supervision

从自然语言监督中学习可迁移的视觉模型 虽然有点data/gpu is all you need的味道&#xff0c;但是整体实验和谈论丰富度上还是很多的&#xff0c;非常长的原文和超级多的实验讨论&#xff0c;隔着屏幕感受到了实验的工作量之大。 Abstract 最先进的计算机视觉系统被训练来预测…

第9篇:数据库中间件的容错机制与高可用架构设计

9.1 为什么数据库中间件需要容错与高可用设计&#xff1f; 随着系统复杂性增加&#xff0c;数据库中间件不仅承载 SQL 路由、分片、事务控制等核心职责&#xff0c;也成为系统的 单点风险源。 为确保系统 724 小时稳定运行&#xff0c;中间件必须具备&#xff1a; 自动故障检测…

c#压缩与解压缩-SharpCompress

SharpCompress SharpCompress 是一个开源项目库&#xff0c;能够处理文件。c#库对于压缩已经有很多&#xff0c;可以随意选择&#xff0c;看了SharpCompress感觉比较简洁&#xff0c;还是介绍给大家。 项目地址&#xff1a; sharpcompress 项目使用 引入nuget包&#xff1…