使用N8N实现不同内容且带附件的邮件群发
2025-02-14 12:34 ≈ 1.4k字 ≈ 4分钟

最近因为工作需要,希望能够做一个邮件群发,大概八万封邮件发给不同的人,修改部分内容,同时带附件。这个原理其实很简单,github上也有一些现有的项目可以使用,不过项目都很老了需要调整代码,同时一些现有的群发工具都是云端的,而我要发的附件其实希望点对点发送,不愿意上传到云端。

正好最近在研究N8N,这是个开源的支持自部署,可以安装到本地服务器或者家用NAS上,所以这倒是一个很好的尝试,保证数据安全,而且后期可以通过大模型来进行邮件跟踪和修改。

N8N安装

1. 使用docker compose安装

N8N安装可以选择云端、自托管,还可以以系统嵌入的方式部署,我就直接装在我NAS的docker里面了。

可以选择PostgresDB来做备用数据库,也可以加Redis,不过由于我是一个人用,我感觉用自带的SQLite就足够了,这样安装起来非常简单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: 'unless-stopped'
network_mode: 'host'
environment:
- N8N_PORT=1204
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
- NODE_OPTIONS=--max-old-space-size=2048
volumes:
- /volume1/docker/n8n/data:/home/node/.n8n:rw
- /volume1/docker/n8n/binaryData1:/binaryData1:rw

你可以用网桥模式,也可以用host模式,用host的话端口号需要在环境变量里面声明。

另外映射两个路径,一个是n8n的本地文件,包括配置信息以及数据库,另一个是二进制文件保存的路径。这个不设置也可以,但是后面你需要从excel里面读取邮件列表的话,就只能把他保存到类似google sheet里面才行,我不愿意把数据上传云端,所以映射一个地址,就可以把excel文件放到这里,让n8n节点去读取

2. 端口转发

在路由器里面,把想要绑ssl证书的那个端口做转发出去,不是这个1204,而是1201,这两个是你自己设置的,随便定义即可

3. nginx代理

端口转发生效之后,用群晖自带的反向代理服务器即可

一定记得在自定义标题里面新增WebSocket,里面包含了Upgrade和Connection,我记得有篇文章说不添加会有些问题,但是我所有的反向代理都添加了

用群晖自带的反向代理服务器有一个好处,就是不用再分别管理SSL证书了,如果你不用这个,自己起一个Nginx也可以实现,但是没必要,那还要导入证书,目前三个月一次。虽然可以用acme实现自动化,但是完全没有必要

开始设置N8N流程

整个流程长这个样子,摸索了半天就搞定了,相对来讲比较简单吧。

强烈建议不要看文档!不要看文档!不要看文档!

因为你看文档你就会想放弃了….

按照自己的逻辑来设计流程即可:

  1. 首先需要一个启动节点,单击启动
  2. 然后读取excel文件
  3. 然后拆分excel文件
  4. 然后进入循环
  5. 然后读取附件文件
  6. 然后发送邮件
  7. 然后加一个延迟,我设置5秒,一分钟12封信,24小时17280封信,这个速度可以接受了,太快了担心封号

1.Read Binary File节点

左边是输入,右边是输出,这里面需要设置的就是File Path,在docker里面的环境变量我专门映射了一个位置到docker里面,因此把文件保存在主机的对应位置之后,就可以直接在根目录的映射位置读取这个文件了

2. Spreadsheet File节点

这里需要设置的就一个,是批量读还是批量写,我选择批量读取上一个节点传过来的excel,然后传到下一个节点

3. Loop Over Items节点

这里设置拆分数量,我们一封一封的发即可,也可以5封5封的发,设置小一点安全

4. Send Email节点

在这个节点需要配置的有很多,首先需要配置邮箱开启STMP,我是使用GMAIL开启两步验证之后,申请一个应用密码就可以了,其他邮箱可以直接搜索或者问ChatGPT。

发送邮件就是你设置的邮箱地址,接收邮件就是从前面excel传过来的邮件地址,这个不用自己写,可以直接在左边INPUT里面选择邮箱那一列,然后拖拽到To Email里面即可

附件的部分,填写的是你读取那个节点设置的名称,不是你的文件名,这个不用担心,发送之后名称还是你原本的文件名,这里你可以理解为把这个变量写进去即可

然后HTML邮件,为了更加稳妥,因为有些小公司的老板可能不用正经邮箱,也许不支持HTML邮件,所以选择两个都要,至于HTML邮件模版,可以在网上搜索HTML模版生成器,我是直接让ChatGPT帮我写了一个复制进去

5. 测试一下效果

先给自己的邮箱发了10封邮件,成功,然后就可以正式使用了,反正我的NAS是24小时开机,慢慢发吧