1、 这是一个基于 Gin 框架的邮件发送服务,对外提供API,实质是通过第三方SMTP发送邮件
• 提供一个简易的Web UI,可在线查看发送记录
• 支持Docker快速部署,非常轻量
• 通过一个GET请求就能发送邮件,适合快速接入终端命令行、shell脚本、各种代码请求等
• 该工具的开源地址:https://github.com/luler/hello_email_tool
2. go环境中,可以直接源码运行
bash
git clone https://github.com/luler/hello_email_tool
cd hello_email_tool
go mod tidy
cp .env.example .env #编辑SMTP 邮件配置、邮件接口授权码
go run main.go serve
3、过Docker快速部署(建议)
vi docker-compose.yml,配置如下
bash
services:
hello_email_tool:
image: ghcr.io/luler/hello_email_tool:latest
restart: always
ports:
- 7878:3000
volumes:
- ./runtime:/app/runtime #这里会保存sqlite数据库
environment:
- TZ=${TZ:-Asia/Shanghai} #时区
- PORT=${PORT:-3000} #服务端口
#数据库配置
- DATABASE_DEFAULT_DRIVER=${DATABASE_DEFAULT_DRIVER:-sqlite}
- DATABASE_DEFAULT_NAME=${DATABASE_DEFAULT_NAME:-runtime/hello_email_tool.sqlite}
#SMTP邮件配置,如下必须设置正确配置,如企业邮箱、QQ邮箱账号的SMTP配置
- SMTP_HOST=${SMTP_HOST:-smtp.example.com}
- SMTP_PORT=${SMTP_PORT:-587}
- SMTP_USERNAME=${SMTP_USERNAME:-your_email@example.com}
- SMTP_PASSWORD=${SMTP_PASSWORD:-your_password}
- SMTP_FROM=${SMTP_FROM:-your_email@example.com}
- SMTP_FROM_NAME=${SMTP_FROM_NAME:-EmailTool}
# 邮件接口授权码,必须修改为复杂的
- EMAIL_AUTH_CODE=${EMAIL_AUTH_CODE:-your_auth_code}
docker run 命令
bash
docker run -d \
--name hello_email_tool \
--restart always \
-p 7878:3000 \
-v /data/runtime:/app/runtime \
-e TZ=${TZ:-Asia/Shanghai} \
-e PORT=${PORT:-3000} \
-e DATABASE_DEFAULT_DRIVER=${DATABASE_DEFAULT_DRIVER:-sqlite} \
-e DATABASE_DEFAULT_NAME=${DATABASE_DEFAULT_NAME:-runtime/hello_email_tool.sqlite} \
-e SMTP_HOST=${SMTP_HOST:-smtp.example.com} \
-e SMTP_PORT=${SMTP_PORT:-587} \
-e SMTP_USERNAME=${SMTP_USERNAME:-your_email@example.com} \
-e SMTP_PASSWORD=${SMTP_PASSWORD:-your_password} \
-e SMTP_FROM=${SMTP_FROM:-your_email@example.com} \
-e SMTP_FROM_NAME=${SMTP_FROM_NAME:-EmailTool} \
-e EMAIL_AUTH_CODE=${EMAIL_AUTH_CODE:-your_auth_code} \
ghcr.io/luler/hello_email_tool:latest
- 创建启动脚本(推荐)
创建 run-email-tool.sh 文件:
bash
#!/bin/bash
# 设置实际的环境变量值(请根据您的实际情况修改)
export TZ=Asia/Shanghai
export PORT=3000
export DATABASE_DEFAULT_DRIVER=sqlite
export DATABASE_DEFAULT_NAME=runtime/hello_email_tool.sqlite
export SMTP_HOST=smtp.qq.com
export SMTP_PORT=587
export SMTP_USERNAME=your_email@qq.com
export SMTP_PASSWORD=your_smtp_password
export SMTP_FROM=your_email@qq.com
export SMTP_FROM_NAME=EmailTool
export EMAIL_AUTH_CODE=your_complex_auth_code_here
运行容器
bash
docker run -d \
--name hello_email_tool \
--restart always \
-p 7878:3000 \
-v /data/runtime:/app/runtime \
-e TZ \
-e PORT \
-e DATABASE_DEFAULT_DRIVER \
-e DATABASE_DEFAULT_NAME \
-e SMTP_HOST \
-e SMTP_PORT \
-e SMTP_USERNAME \
-e SMTP_PASSWORD \
-e SMTP_FROM \
-e SMTP_FROM_NAME \
-e EMAIL_AUTH_CODE \
ghcr.io/luler/hello_email_tool:latest
echo "容器已启动,访问地址: http://localhost:7878"
- 直接使用 .env 文件
创建 .env 文件:
bash
env
TZ=Asia/Shanghai
PORT=3000
DATABASE_DEFAULT_DRIVER=sqlite
DATABASE_DEFAULT_NAME=runtime/hello_email_tool.sqlite
SMTP_HOST=smtp.qq.com
SMTP_PORT=587
SMTP_USERNAME=your_email@qq.com
SMTP_PASSWORD=your_smtp_password
SMTP_FROM=your_email@qq.com
SMTP_FROM_NAME=EmailTool
EMAIL_AUTH_CODE=your_complex_auth_code_here
然后运行:
加载 .env 文件并运行
bash
docker run -d \
--name hello_email_tool \
--restart always \
--env-file .env \
-p 7878:3000 \
-v $(pwd)/runtime:/app/runtime \
ghcr.io/luler/hello_email_tool:latest
常用管理命令:
bash
# 查看容器日志
docker logs hello_email_tool
# 查看实时日志
docker logs -f hello_email_tool
# 停止容器
docker stop hello_email_tool
# 启动容器
docker start hello_email_tool
# 重启容器
docker restart hello_email_tool
# 删除容器
docker rm -f hello_email_tool
# 进入容器
docker exec -it hello_email_tool sh
重要提醒:
请务必将所有 example.com 和占位符替换为您的实际配置
EMAIL_AUTH_CODE 应该设置为一个复杂的随机字符串,用于API认证
确保 runtime 目录存在并具有正确的权限
bash
邮件发送 API 接口文档
接口信息
接口地址: /api/email
请求方式: GET / POST
Content-Type: application/x-www-form-urlencoded 或 application/json
请求参数
参数名 类型 必填 说明
auth_code string 是 授权码,需与环境变量 EMAIL_AUTH_CODE 一致
to string 是 收件人邮箱地址,多个用逗号分隔
cc string 否 抄送人邮箱地址,多个用逗号分隔
subject string 是 邮件主题
body string 是 邮件正文内容
is_html bool/string 否 是否为 HTML 格式邮件,支持 1、true、yes
from_name string 否 发件人名称,默认使用环境变量 SMTP_FROM_NAME
Postman 测试示例
- GET 请求示例
bash
GET http://localhost:7878/api/email?
auth_code=your_auth_code&
to=recipient@example.com&
subject=测试邮件&
body=这是一封测试邮件&
is_html=false
- POST 请求示例 (x-www-form-urlencoded)
bash
POST http://localhost:7878/api/email
Content-Type: application/x-www-form-urlencoded
auth_code=your_auth_code&
to=user1@example.com,user2@example.com&
cc=cc1@example.com,cc2@example.com&
subject=测试邮件主题&
body=<h1>HTML邮件内容</h1><p>这是一封HTML格式的测试邮件</p>&
is_html=true&
from_name=我的邮件工具
- POST 请求示例 (JSON)
bash
POST http://localhost:7878/api/email
Content-Type: application/json
{
"auth_code": "your_auth_code",
"to": "recipient@example.com",
"cc": "cc1@example.com,cc2@example.com",
"subject": "测试邮件主题",
"body": "这是一封纯文本测试邮件",
"is_html": false,
"from_name": "系统通知"
}
成功响应
bash
json
{
"code": 200,
"message": "邮件发送成功",
"data": {
"messageId": "<20231231000000.123456@example.com>",
"accepted": ["recipient@example.com"],
"rejected": []
}
}
错误响应示例
- 授权码错误
bash
json
{
"code": 401,
"message": "授权码错误"
}
2. 参数缺失
json
{
"code": 400,
"message": "参数错误: to 为必填参数"
}
3. SMTP 配置错误
json
{
"code": 500,
"message": "邮件发送失败: SMTP连接失败"
}
使用 cURL 测试
bash
# GET 请求
curl "http://localhost:7878/api/email?auth_code=YOUR_CODE&to=test@example.com&subject=测试&body=内容"
# POST 请求 (form-data)
curl -X POST http://localhost:7878/api/email \
-d "auth_code=YOUR_CODE" \
-d "to=test@example.com" \
-d "subject=测试邮件" \
-d "body=邮件正文内容" \
-d "is_html=false"
# POST 请求 (JSON)
curl -X POST http://localhost:7878/api/email \
-H "Content-Type: application/json" \
-d '{
"auth_code": "YOUR_CODE",
"to": "test@example.com",
"subject": "测试",
"body": "内容",
"is_html": false
}'
批量发送示例
bash
# 发送给多个收件人
curl -X POST http://localhost:7878/api/email \
-d "auth_code=YOUR_CODE" \
-d "to=user1@company.com,user2@company.com,user3@company.com" \
-d "cc=manager@company.com" \
-d "subject=月度报告通知" \
-d "body=请查收本月的月度工作报告。" \
-d "is_html=false"
注意事项
安全性: 授权码 auth_code 应保持机密,不要在前端代码中硬编码
批量发送: 多个收件人用逗号分隔,注意不要有空格
HTML 邮件: 使用 HTML 格式时,确保内容是有效的 HTML
频率限制: 注意避免频繁调用,以免被 SMTP 服务商限制
SMTP 配置: 确保 Docker 容器的 SMTP 环境变量配置正确
服务启动后容器启动后,可以通过以下地址访问:
API 接口: http://localhost:7878/api/email
健康检查: http://localhost:7878/health (如果有提供)
文档页面: http://localhost:7878/docs (如果有提供)

- 通过Web UI查看邮件发送记录
• 直接访问地址:http://server_ip:7878/,进入邮件发送列表页面 需要授权码,输入启动时设置EMAIL_AUTH_CODE变量的值