惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News - Newest:
Hacker News - Newest: "LLM"
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
N
News and Events Feed by Topic
H
Hacker News: Front Page
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
SecWiki News
SecWiki News
N
News | PayPal Newsroom
T
Tor Project blog
W
WeLiveSecurity
A
Arctic Wolf
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
月光博客
月光博客
AWS News Blog
AWS News Blog
D
Docker
C
CERT Recently Published Vulnerability Notes
MyScale Blog
MyScale Blog
Google Online Security Blog
Google Online Security Blog
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
I
InfoQ
人人都是产品经理
人人都是产品经理
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
博客园 - 【当耐特】
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Recorded Future
Recorded Future
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
D
DataBreaches.Net
S
Security Affairs
WordPress大学
WordPress大学
T
Threatpost
Microsoft Security Blog
Microsoft Security Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
S
SegmentFault 最新的问题
B
Blog RSS Feed
Project Zero
Project Zero
P
Proofpoint News Feed

皓子的小站

网站字体应用之坑——font-family 篇 糟糕的 meta name="theme-color" How to Automatically Track Newly Supported ESLint Rules in Oxlint How to Gradually Migrate from ESLint to Oxlint (Without Breaking Everything) 静态资源预压缩:零运行时开销,极致节省带宽 CVE-2025-70886 Proof of Concept (PoC) | A Script to Crash Halo CMS Comment Backend 自定义网页鼠标指针——一段曲折的旅程 CVE-2025-70886 漏洞复现/PoC | 一个脚本让 Halo CMS 评论后台瘫痪 2025 年终总结 & 博客两周年 老用户专享!已有 Halo 专业版授权可免费升级商业版 自动追踪 Oxlint 对 ESLint 规则的新增支持 Halo 贡献者证书与实体周边盲盒开箱 博客评论系统指南 CDN 回源跟随配置导致登录异常问题排查 SCDN 免费赞助计划:助力高质量博客&博客圈 锐捷校园网:网络共享与带宽叠加方案(哈理工案例) ESLint 到 Oxlint 渐进式迁移快速上手指南 Fixing Vite Breaking Inline JS & CSS in Thymeleaf Templates 解决 Vite 破坏 Thymeleaf 模板内联 JS & CSS 的方法 我的博客,为什么是月更? 博客俱乐部一周年纪念品开箱 网站字体加载之坑——format 篇 经历 1000000000 次 DDoS 请求攻击后,我总结了三条经验 题解分享:[AtCoder Beginner Contest 414 E] Count A%B=C 题解分享:[蓝桥杯 2025 国 Python A] 杨辉三角 P12876 FiF口语训练破解刷分教程(适用于 Windows) 不要与蠢人辩论 小心网络地雷·续篇 当心网络组织“开往”·续篇 当心网络组织“开往” 小心网络地雷 在 Halo CMS 中通过模板实现随机推荐多篇文章 回应某博客上有关“开往”组织在内部会议上对我的污蔑(上) 再遭 DDoS 攻击:CDN 流量限额拦不住请求计费飙升 2025年团体程序设计天梯赛 - Python 个人赛时暴力题解 网站流量分析工具 Umami 中国大陆合规版发布 把握当下,享受生活 Folo 认证功能反成漏洞?警惕 RSS 订阅源所有权被恶意盗取风险 在 Halo CMS 中通过模板实现随机文章跳转功能 从沉默展柜到时代回响:731部队罪证陈列馆参访手记 脚本分享:CDN 流量触顶后自动切换至 Cloudflare 官方 BUG 快薅!Halo 永久/买断用户可额外获得一份买断许可 老用户专享!已有 1Panel 永久授权/买断许可用户可再领免费买断许可证! 限时特惠!1¥ 立即解锁 1Panel 专业版全功能 61 天 混合云架构下的动态 IPv6 智能加速实践:从家庭网络到全球分发的低成本部署指南 如何用 AI 全方面辅助博客创作 - 从博文之内到博文之外 Random Number Generation and Formatting in Thymeleaf Thymeleaf 随机数生成与格式化详解 列举我维护的项目和发布的软件包 Going Against the Grain - Four Websites That Make Your URL Longer 反其道而行 - 四个让你网址变得更长的网站 2024 年终总结 & 博客一周年 基于 OneBot API 的简易异步 QQ 群批量发消息脚本 如何快速完成中文排版优化 如何给文章分类和打标签 群规之敏感违禁词对抗 一图展示​ ​RSS3 世界 - The Open(RSS3) Universe 开源项目发到 bilibili 后可能获得的 PR C/C++:为什么 a[i][j] 等价于 *(*(a+i)+j) Fast Methods to Convert Uppercase Letters to Lowercase in C++ C++ 中快速将字符串大写字母转为小写的方法 Fixing GitHub Actions push to ghcr '403 Forbidden' error Fixing docker pull image "ghcr.io..." Unauthorized error 本站“算法题练习/题解分享”相关文章汇总 不怕流氓多,就怕流氓有文化——站长应该防范的几个问题及对应解决方法分享 题解分享:HRBUST 1132 水数 新手程序员必备的三项技能 如何快速排查插件(模组)的兼容性问题(基于二分法和分治思想) 通过 Umami 最新功能观察定时发布文章的最佳时段 踩坑分享:如何一个人搬运 126.7 斤的书坐动车 两篇文章分享:别像弱智一样提问 & 提问的智慧 论下落式音游/定轨音游中的优质粪铺(文末附铺面推荐) 为什么选择无纸化阅读?为什么买墨水屏电子书?为什么 Kindle“失败”了? 我维护的 Halo 主题,现已发布到 Halo 应用商店! OSU!Standard(osu!std)/OSU!Taiko 转 OSU!Mania 铺面转换器发布 我常用的 OSU!Mania 皮肤分享 电荷守恒辨析:为什么一个离子带多个电荷要乘上所带电荷数而不是除以所带电荷数 注意!align-items: flex-start 会导致 overflow-wrap: break-word 失效 惊人 98 元限定T恤!1Panel, Halo 开发商开启推广积分奖励活动 Minecraft Spigot Bukkit 服务器插件开发 教程收集 中文博客倡议 Windows 10 遇到“只能重装系统”但不想重装的解决方案 Windows 10 文件系统错误 -2144926975 -2147219196 修复 Windows 10 升级 Windows 11 简明教程 CSS 预处理器如何正确的复用样式(stylus 中使用 @extend 继承的坑) 请一定要回复博客下的匿名评论!对于博主和评论者有关匿名评论的倡议 一图解释单一质点运动波动图像和振动图像的关系 解决 Docker pull image "ghcr.io..." Unauthorized error 解决 GitHub Actions push to ghcr '403 Forbidden' error 解决 Umami API 更新延迟问题(如何修改开源项目代码并构建 Docker 镜像-以 Umami 为例) 在国家公祭日自动将网站变灰 中文博客圈列表 解决 Halo CMS 的 Umami Plugin CORS&CSP 跨域报错问题 Windows 创建存储池报错 无法创建池 不支持该请求 (0x00000032) Windows 显示器突然黑白 桌面突然黑白 鼠标和截图还是彩色的 通过指令过滤出正确的公网 IPv6 地址(记一次折腾 IPv6 DDNS) 我的世界免费科技地址 1.7-1.21 网站 Favicon 下载工具发布 键盘 Bios 内可用 系统内无法输入 设备管理器无黄色感叹号 设备管理器 网卡一堆黄色感叹号 例如 WAN, Miniport
快速部署教程 - 通过 Webhook 触发邮件通知的开源自托管服务
HowieHz · 2025-01-21 · via 皓子的小站

前言

有许多服务(如 ddnsgo)仅支持 Webhook 通知,不支持设置邮箱(SMTP)服务进行通知。
本文介绍的这个可本地部署的服务就是用于将 Webhook 转换成邮箱通知。

本文重在教学如何快速部署,快速体验。

下面列出此项目相关的链接:

此项目特点

  • 接收 GET 和 POST 请求作为 Webhook 触发器
  • 允许发送纯文本或 HTML 格式的电子邮件
  • 配置灵活,支持多种 SMTP 服务器
  • 异步处理,提高性能和响应速度
  • 轻量,占用内存/存储低

Windows 环境下快速部署

先决条件

  • SMTP 服务器账号(如 Gmail, QQ 邮箱等)

部署测试流程

  1. 进入 Releases 页面,找到最新版本,从 Assets 栏下下载最新二进制文件。点我直接下载 webhook-email-sender.exe v1.0.0

  2. 将下载完毕的 webhook-email-sender.exe 放置到任意目录中,双击 webhook-email-sender.exe 会在运行目录下生成默认配置文件 config.json

  3. 修改 config.json 以正确配置

    • 配置文件说明
    {
      "SMTP_SERVER": "smtp.example.com",
      "SMTP_PORT": 587,
      "SMTP_TLS": false,
      "SMTP_USERNAME": "your_username",
      "SMTP_PASSWORD_ENV": "SMTP_PASSWORD",
      "SMTP_PASSWORD": "your_password",
      "SERVICE_HOST": "127.0.0.1",
      "SERVICE_PORT": 5000,
      "SERVICE_PATH": "/webhook",
      "SERVICE_TOKEN": ""
    }
    
    • SMTP_SERVER: SMTP 服务器地址
    • SMTP_PORT: SMTP 服务器端口
    • SMTP_TLS: 是否启用 TLS 加密
    • SMTP_USERNAME: SMTP 登录用户名
    • SMTP_PASSWORD_ENV: 存储 SMTP 密码的环境变量名称
    • SMTP_PASSWORD: SMTP 登录密码(如果未设置环境变量)
    • SERVICE_HOST: 服务监听的主机
    • SERVICE_PORT: 服务监听的端口
    • SERVICE_PATH: Webhook 路径
    • SERVICE_TOKEN: 用于身份验证的令牌,如果置空则为不启用

    解释:程序会先读取配置文件 SMTP_PASSWORD_ENV 项所指定的环境变量,如果指定的环境变量未设置,则会读取配置文件的 SMTP_PASSWORD 项作为密码。
    注意: 为了安全起见,不要将 config.json 传到公共代码仓库。
    提示:如果发送邮件失败,请尝试 SMTP_PORT 分别为 587465,对应 SMTP_TLS 分别为 falsetrue,的组合

  4. 运行 webhook-email-sender.exe

  5. 新开一个终端窗口输入 Invoke-WebRequest -Uri "http://localhost:5000/webhook?subject=测试邮件&to=recipient@example.com&body=这是测试邮件内容" -Method GET 测试是否部署成功(recipient@example.com 修改为你的实际接收邮箱)

  6. 快速部署流程已结束,完整文档请看:文档链接

Linux/Mac 环境下快速部署

先决条件

  • Python 3.8+
  • SMTP 服务器账号(如 Gmail, QQ 邮箱等)

部署测试流程

  1. 克隆仓库

    git clone https://github.com/HowieHz/webhook-email-sender.git
    cd webhook-email-sender
    
  2. 创建并激活虚拟环境

    python -m venv venv
    # Windows
    venv\Scripts\activate
    # macOS/Linux
    source venv/bin/activate
    
  3. 安装依赖

    pip install -r requirements.txt
    
  4. 初次启动服务,会在运行目录下生成:

    python main.py
    
  5. 修改生成的 config.json 以正确配置

    • 配置文件说明
    {
      "SMTP_SERVER": "smtp.example.com",
      "SMTP_PORT": 587,
      "SMTP_TLS": false,
      "SMTP_USERNAME": "your_username",
      "SMTP_PASSWORD_ENV": "SMTP_PASSWORD",
      "SMTP_PASSWORD": "your_password",
      "SERVICE_HOST": "127.0.0.1",
      "SERVICE_PORT": 5000,
      "SERVICE_PATH": "/webhook",
      "SERVICE_TOKEN": ""
    }
    
    • SMTP_SERVER: SMTP 服务器地址
    • SMTP_PORT: SMTP 服务器端口
    • SMTP_TLS: 是否启用 TLS 加密
    • SMTP_USERNAME: SMTP 登录用户名
    • SMTP_PASSWORD_ENV: 存储 SMTP 密码的环境变量名称
    • SMTP_PASSWORD: SMTP 登录密码(如果未设置环境变量)
    • SERVICE_HOST: 服务监听的主机
    • SERVICE_PORT: 服务监听的端口
    • SERVICE_PATH: Webhook 路径
    • SERVICE_TOKEN: 用于身份验证的令牌,如果置空则为不启用

    解释:程序会先读取配置文件 SMTP_PASSWORD_ENV 项所指定的环境变量,如果指定的环境变量未设置,则会读取配置文件的 SMTP_PASSWORD 项作为密码。
    注意: 为了安全起见,不要将 config.json 传到公共代码仓库。
    提示:如果发送邮件失败,请尝试 SMTP_PORT 分别为 587465,对应 SMTP_TLS 分别为 falsetrue,的组合

  6. 正式启动服务:

    python main.py
    
  7. 新开一个终端窗口输入以下指令测试是否部署成功 (recipient@example.com 修改为你的实际接收邮箱)

    curl "http://localhost:5000/webhook?subject=测试邮件&body=这是测试邮件内容&to=recipient@example.com"
    
  8. 快速部署流程已结束,完整文档请看:文档链接

结语

欢迎在评论区讨论,
评论区验证码为简单的 100 以内算术题。