n8n:用“屠龙刀”杀鸡?自动化神器降维打击日常琐事
May 03, 2025
一、n8n 是什么?
n8n 是一款开源的 workflow 自动化工具,采用节点式可视化编程方式,让非技术人员也能轻松构建复杂的自动化流程。其名称源自 nodemation
(node
(节点)+ automation
(自动化))。或许这个数字8也象征着无限的可能性。
小知识:Numeronym(数字缩写)命名规则 核心特征是用首尾字母加中间字母数的组合来简化长单词。 其命名公式可表示为: Numeronym=首字母+(中间字母数)+尾字母
如:i18n (Internationalization,国际化)、l10n (Localization,本地化)、k8s (Kubernetes)、n8n (nodemation)、……
核心特点:
- 可本地部署:完全掌控数据隐私
- 可视化编辑器:拖拽节点构建流程
- 丰富连接器:支持400+应用/服务
- 开源协议:公平代码许可证(Fair-code License),可商用
- 集成 AI 能力:通过社区节点(n8n-nodes-mcp)无缝接入MCP协议,赋予AI工作流调用外部工具与服务的标准化能力
一些使用场景
- 用 Python 清洗数据 → MCP 调用 AI 分析 → 结果自动推送
- 热点新闻监控 → 大模型摘要生成 → 推送Slack/电报
- 定时抓取多源数据 → 用 Python 清洗数据 → 生成PDF/Excel报告 → 下载到本地/邮件/飞书推送
二、常见技术概念横向对比
- MCP:协议层,AI 领域的“通用插座”
- Dify:应用层,专注AI工作流集成的“组装车间”
- n8n:应用层,专注流程自动化的“乐高积木”
三、三大维度实现便捷与深度定制化:
-
灵活集成逻辑与应用
- 可视化拖拽 400+ 应用节点,构建跨平台自动化流程
- 原生支持 REST/GraphQL 等协议,无缝对接企业现有系统
-
多语言脚本扩展能力
- 通过 JavaScript/Python 注入自定义逻辑
- 支持调用 npm/pip 生态库,实现复杂数据处理
-
AI 与 MCP 服务深度集成
- 内置 LangChain 节点,直接调用 GPT/Claude 等大模型
- 通过 n8n-nodes-mcp 社区模块接入 Model Context Protocol
- 标准化调度 AI 工具链(如语音合成/地图 API)
四、实战入门(每周导出任务)
注:虽然 n8n 非常强大,但此处还是从一个小任务开始。
需求
定期下载网站中的一些表单数据,并处理成期望的格式,作为附件邮件发送 / 下载到本地。(暂时手动,不用 Cron 自动执行)
配置流程

配置就不一一细说,下面就几个特殊点展开讲一下
登录 & 权限管理
-
登录权限配置:先请求登录接口,后续请求可从登录响应中取权限信息。我这个应用是需要从 header 里取 cookie,其他如 JWT 等的配置略有不同。
-
身份信息的隐私处理:用户名密码不建议直接储存在工作流中,n8n 有一个单独配置凭证的地方,再按需引入登录接口 (后续的邮箱登录信息,也储存在这)。
-
右上角小箭头,选择
Create Credential
-
在里面填入登录需要的信息(我这里填入的是 Login 提交的 body)
-
代码节点
以处理 excel 数据为例,需要 3 步:
- 用
Data transformation -> Extract from File
节点将 excel 转为 json 数组 - 再用
Core -> Code
节点处理数据 - 最后通过
Data transformation -> Convert to File
转回 excel
具体代码节点,可使用 JavaScript 或 Python。
节点的内置方法/变量有:$binary
、$input
、$json
、$today
、$response
等,详情参见文档。
发送邮件
-
邮箱配置:在邮箱服务端的设置中,打开 SMTP 设置。我用的是飞书,设置如下图:
-
配置 SMTP:在 Credentials 里新建 SMTP 账号,配置身份信息、Host、Port。此处可以发现非常人性化,配置是否正确都会在页面实时测试提示。 n8n 更多邮箱配置详情参见Send Email credentials
-
发送邮件节点配置:节点配置时,都可以实时看到 Input(左) 和 Output(右) 数据,来方便调整配置参数。我的邮件的重点是附件,可以在
Options
里添加
问题解决
1. 文件下载时,中文会变成一串包括百分号的字符串
原因:在文件下载过程中,若文件名包含中文字符,可能会被浏览器自动进行 URL 编码,显示为类似 %E6%B5%8B%E8%AF%95
的形式。为恢复原始的中文文件名,需使用 decodeURIComponent() 方法对编码后的文件名进行解码。
如果是下载到本地,在Read/Write Files from Disk
节点的文件名参数中直接处理即可,如:/...[文件路径].../{{ decodeURIComponent($json.headers['content-disposition'].match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/)[1].replace(/['"]/g, '')) }}
。
也可以加一层更通用的 Code
节点处理:
return items.map(item => {
item.binary.data.fileName = decodeURIComponent(item.binary.data.fileName)
return item
})
2. Outlook SMTP 发邮件报错:
Couldn’t connect with these settings
...:error:xxx:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:355:
原因:协议问题。但关闭 SSL/TLS
开关(使用STARTTLS
)后仍有报错:
Invalid login: ... Authentication unsuccessful, basic authentication is disabled....
原因:Basic Auth (邮箱+密码) 已在 2023 年被微软禁用,需要用 OAuth 2.0。(我选择了更换邮箱服务)
结尾
鸡呢?鸡呢?!