一个基于 FastAPI 的高性能异步 Webhook 服务,用于通过 Webhook 触发电子邮件通知。
一个基于 FastAPI 的高性能异步 Webhook 服务,用于通过 SMTP 发送电子邮件。
- 接收 GET 和 POST 请求作为 Webhook 触发器
- 发送纯文本或 HTML 格式的电子邮件
- 配置灵活,支持多种 SMTP 服务器
- 异步处理,提高性能和响应速度
部署服务
- SMTP 服务器账号(如 Gmail, QQ 邮箱等)
从 Releases 页面下载最新二进制文件即可
- Python 3.8+
- SMTP 服务器账号(如 Gmail, QQ 邮箱等)
创建并激活虚拟环境
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
安装依赖
pip install -r requirements.txt
编辑 config.json 文件,填写你的 SMTP 服务器信息和服务配置。
{
"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 传到公共代码仓库。
直接运行下载的二进制文件即可启动服务
使用以下命令启动服务:
python main.py
或者使用 uvicorn 直接运行:
uvicorn main:app --host 127.0.0.1 --port 5000
服务将监听配置文件中指定的主机和端口。
发送带查询参数的 GET 请求以触发邮件发送。
- to: 收件人的电子邮件地址(必需)
- subject: 邮件主题(可选)
- body: 邮件正文内容(可选)
- type: 邮件内容的类型,"plain" 或 "html"(可选,默认为 "plain")
- token: 用于身份验证的令牌(如启用则为必需项)
示例:
Invoke-WebRequest -Uri "http://localhost:5000/webhook?subject=测试邮件&to=recipient@example.com&body=这是测试邮件内容" -Method GET
curl "http://localhost:5000/webhook?subject=测试邮件&to=recipient@example.com&body=这是测试邮件内容"
发送 JSON 数据的 POST 请求以触发邮件发送。
- to: 收件人的电子邮件地址(必需)
- subject: 邮件主题(可选)
- body: 邮件正文内容(可选)
- type: 邮件内容的类型,"plain" 或 "html"(可选,默认为 "plain")
- token: 用于身份验证的令牌(如启用则为必需项)
- Content-Type: 必须包括
application/json
PowerShell 示例:
$headers = @{
"Content-Type" = "application/json; charset=utf-8"
}
$body = @{
subject = "测试邮件"
body = "这是测试邮件内容"
to = "recipient@example.com"
type = "plain"
} | ConvertTo-Json
Invoke-RestMethod -Uri "http://localhost:5000/webhook" `
-Method POST `
-Headers $headers `
-Body $body
cURL 示例:
curl -X POST "http://localhost:5000/webhook" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"subject": "测试邮件", "body": "这是测试邮件内容", "to": "recipient@example.com", "type": "plain"}'
- 配置文件未找到: 确保 config.json 存在于项目根目录,并且包含所有必需的字段。
- SMTP 连接失败: 检查 SMTP 服务器地址、端口、用户名和密码是否正确。确保网络允许与 SMTP 服务器的连接。
- 邮件发送失败: 查看服务器日志中的错误信息,确保 SMTP 配置正确,并且目标邮箱地址有效。
from https://github.com/HowieHz/webhook-email-sender
---------------
通过 Webhook 触发邮件通知的开源自托管服务
前言
有许多服务(如 ddnsgo)仅支持 Webhook 通知,不支持设置邮箱(SMTP)服务进行通知。
本文介绍的这个可本地部署的服务就是用于将 Webhook 转换成邮箱通知。
本文重在教学如何快速部署,快速体验。
下面列出此项目相关的链接:
- 项目地址:HowieHz/webhook-email-sender。
- 项目完整文档链接:文档链接
- 反馈问题:Issues
- 交流群(QQ):点击我加入群聊 群号 694413711
此项目特点
- 接收 GET 和 POST 请求作为 Webhook 触发器
- 允许发送纯文本或 HTML 格式的电子邮件
- 配置灵活,支持多种 SMTP 服务器
- 异步处理,提高性能和响应速度
- 轻量,占用内存/存储低
Windows 环境下快速部署
先决条件
- SMTP 服务器账号(如 Gmail, QQ 邮箱等)
部署测试流程
-
进入 Releases 页面,找到最新版本,从 Assets 栏下下载最新二进制文件。点我直接下载 webhook-email-sender.exe v1.0.0
-
将下载完毕的
webhook-email-sender.exe
放置到任意目录中,双击webhook-email-sender.exe
会在运行目录下生成默认配置文件config.json
-
修改
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
分别为 587、465,对应SMTP_TLS
分别为false
、true
,的组合-
运行
webhook-email-sender.exe
-
新开一个终端窗口输入
Invoke-WebRequest -Uri "http://localhost:5000/webhook?subject=测试邮件&to=recipient@example.com&body=这是测试邮件内容" -Method GET
测试是否部署成功(recipient@example.com 修改为你的实际接收邮箱) -
快速部署流程已结束,完整文档请看:文档链接
Linux/Mac 环境下快速部署
先决条件
- Python 3.8+
- SMTP 服务器账号(如 Gmail, QQ 邮箱等)
部署测试流程
-
克隆仓库
git clone https://github.com/HowieHz/webhook-email-sender.git
cd webhook-email-sender
创建并激活虚拟环境
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
安装依赖
pip install -r requirements.txt
初次启动服务,会在运行目录下生成:
python main.py
修改生成的 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
分别为 587、465,对应SMTP_TLS
分别为false
、true
,的组合
正式启动服务:
python main.py
新开一个终端窗口输入以下指令测试是否部署成功 (recipient@example.com 修改为你的实际接收邮箱)
curl "http://localhost:5000/webhook?subject=测试邮件&body=这是测试邮件内容&to=recipient@example.com"
快速部署流程已结束,完整文档请看:文档链接
No comments:
Post a Comment