SMTP MCP服务器(Java SDK 0.11.0)
一个全面的模型上下文协议(MCP)服务器,通过SMTP集成提供强大的电子邮件发送功能。该服务器支持多种传输协议(STDIO、SSE和Streamable HTTP),并通过MCP工具和REST端点公开电子邮件功能,使其成为将电子邮件功能集成到AI应用程序、自动化工作流和测试环境中的理想选择。
📋 目录
- STDIO传输 - 苏格兰和南方能源公司运输 - 流式HTTP
🚀 特性
核心功能
- 多种传输协议:STDIO、服务器发送事件(SSE)和流式HTTP
- MCP工具集成:提供
send-emailMCP客户端工具 - REST API:用于测试和集成的简单REST端点
- Gmail SMTP支持:已为Gmail SMTP预配置TLS安全
- 多个收件人:支持TO、CC和BCC收件人
- 健康监测:内置健康检查端点
- 克劳德桌面兼容:已准备好与Claude Desktop和其他MCP客户端一起使用
高级功能
- 丰富的电子邮件格式:支持HTML和纯文本电子邮件
- 附件支持 (计划中):文件附件功能
- 电子邮件模板 (计划中):可重复使用的电子邮件模板
- 重试机制:自动重试失败的电子邮件传递
- 速率限制:内置防止垃圾邮件和过度使用的保护
- 综合录井:调试和监控的详细日志
📋 先决条件
- Java 21 或更高
- Maven 3.6+
- Gmail帐户 使用特定于应用程序的密码(或其他SMTP服务器凭据)
- MCP客户端 (Claude Desktop、自定义客户端或用于测试的MCP检查器)
🏗️ 架构概述
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ MCP Client │ │ MCP Server │ │ SMTP Server │
│ (Claude, etc.) │◄───┤ (This Project) │────►│ (Gmail, etc.) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
┌────▼────┐
│ REST API│
│ Testing │
└─────────┘该应用程序包括:
- MCP服务器:通过多种传输处理MCP协议通信
- 电子邮件服务:JavaMail的核心SMTP电子邮件发送功能
- REST端点:用于测试和健康检查的其他HTTP端点
- 传输层:支持STDIO、SSE和流式HTTP协议
- 配置层:针对不同SMTP提供程序的灵活配置
🛠️ 安装与建造
1.克隆存储库
git clone https://github.com/RayenMalouche/Java-MCP-Server-For-SMTP-Mailing.git
cd Java-MCP-Server-For-SMTP-Mailing2.配置电子邮件设置
在中编辑SMTP配置 Application.java:
// SMTP Configuration - Update these values
private static final String SMTP_USERNAME = "your-email@gmail.com";
private static final String SMTP_PASSWORD = "your-app-password";
private static final String SMTP_HOST = "smtp.gmail.com";
private static final int SMTP_PORT = 587;
private static final boolean SMTP_TLS_ENABLED = true;
private static final boolean SMTP_SSL_ENABLED = false;3.建设项目
# Clean build
mvn clean compile
# Create JAR file
mvn clean package -DskipTests
# Build with tests (optional)
mvn clean package⚙️ 配置
Gmail应用程序密码设置
- 启用双因素身份验证 在您的Gmail帐户上
- 首选 Google帐户设置 > 安全 > 应用密码
- 生成新的应用程序密码 对于此应用程序
- 在中使用生成的密码
SMTP_PASSWORD领域
替代SMTP提供程序
微软Outlook/Hotmail
private static final String SMTP_HOST = "smtp-mail.outlook.com";
private static final int SMTP_PORT = 587;
private static final boolean SMTP_TLS_ENABLED = true;邮件
private static final String SMTP_HOST = "smtp.mail.yahoo.com";
private static final int SMTP_PORT = 587;
private static final boolean SMTP_TLS_ENABLED = true;自定义SMTP服务器
private static final String SMTP_HOST = "your-smtp-server.com";
private static final int SMTP_PORT = 25; // or 465/587
private static final boolean SMTP_TLS_ENABLED = true;📖 用法
查找所需路径
在使用服务器之前,请确定系统上的以下路径:
项目路径
视窗:右键单击文件夹→ 属性→ 位置
Example: C:\Users\YourName\Documents\Java-MCP-Server-For-SMTP-MailingmacOS/Linux:
cd /path/to/project && pwd
# Example: /home/username/Java-MCP-Server-For-SMTP-MailingJava可执行路径
视窗:
where java
# Example: C:\Program Files\Common Files\Oracle\Java\javapath\java.exemacOS/Linux:
which java
# Example: /usr/bin/java or /opt/homebrew/bin/javaJava主路径
视窗:
echo %JAVA_HOME%
# Example: C:\Program Files\Java\jdk-21macOS/Linux:
echo $JAVA_HOME
# Example: /usr/lib/jvm/java-21-openjdk1.STDIO传输(建议用于克劳德桌面)
MCP检验员测试
# From inside your project directory:
# 1. Start the server
java -jar target/RayenMalouche-0.0.1-SNAPSHOT.jar --stdio
# 2. In another terminal, run the inspector
npx @modelcontextprotocol/inspector java -jar "/target/RayenMalouche-0.0.1-SNAPSHOT.jar" --stdioClaude桌面集成
Windows配置 (%APPDATA%\Claude\config.json):
{
"mcpServers": {
"smtp-email-server": {
"command": "",
"args": [
"-jar",
"\\target\\RayenMalouche-0.0.1-SNAPSHOT.jar",
"--stdio"
],
"env": {
"JAVA_HOME": ""
}
}
}
}macOS/Linux配置 (~/Library/Application Support/Claude/config.json 或 ~/.config/Claude/config.json):
{
"mcpServers": {
"smtp-email-server": {
"command": "",
"args": [
"-jar",
"/target/RayenMalouche-0.0.1-SNAPSHOT.jar",
"--stdio"
],
"env": {
"JAVA_HOME": ""
}
}
}
}备注:The env 部分是可选的,但建议保持一致。
2.服务器发送事件(SSE)传输
启动SSE服务器
java -jar target/RayenMalouche-0.0.1-SNAPSHOT.jar --sseMCP检验员测试
npx @modelcontextprotocol/inspector java -jar "/target/RayenMalouche-0.0.1-SNAPSHOT.jar" --sse直接MCP客户端连接
将您的MCP客户端连接到: http://localhost:45450/sse
3.流式HTTP传输
启动HTTP服务器
java -jar target/RayenMalouche-0.0.1-SNAPSHOT.jar --streamable-httpMCP检验员测试
npx @modelcontextprotocol/inspector java -jar "/target/RayenMalouche-0.0.1-SNAPSHOT.jar" --streamable-http🧪 测试
REST API测试
发送电子邮件
curl -X POST http://localhost:45450/api/test-email \
-H "Content-Type: application/json" \
-d '{
"to": "test@example.com",
"subject": "Test Email from MCP Server",
"body": "This is a test email sent via the MCP SMTP server!",
"cc": "optional-cc@example.com",
"bcc": "optional-bcc@example.com"
}'健康检查
curl http://localhost:45450/api/health使用邮递员
- 将端点导入Postman
- 基本URL:
http://localhost:45450 - 端点:
- POST /api/test-email (电子邮件发送) - GET /api/health (健康检查)
通过Claude Desktop进行MCP工具测试
设置完Claude Desktop集成后,您可以通过询问Claude来进行测试:
"Send an email to john@example.com with the subject 'Meeting Reminder' and body 'Don't forget about our meeting tomorrow at 2 PM.'"Claude将使用MCP工具通过您配置的SMTP服务器发送电子邮件。
📚 api参考
MCP工具:发送电子邮件
参数:
to(必填):收件人电子邮件地址subject(必填):电子邮件主题行body(必填):电子邮件正文内容cc(可选):CC电子邮件地址bcc(可选):BCC电子邮件地址
MCP客户端中的示例用法:
{
"tool": "send-email",
"parameters": {
"to": "recipient@example.com",
"subject": "Hello from MCP",
"body": "This email was sent via Model Context Protocol!",
"cc": "manager@example.com"
}
}REST端点
POST/api/测试电子邮件
通过REST API发送电子邮件。
请求正文:
{
"to": "recipient@example.com",
"subject": "Email Subject",
"body": "Email body content",
"cc": "optional-cc@example.com",
"bcc": "optional-bcc@example.com"
}成功响应 (200 OK):
{
"status": "success",
"message": "Email sent successfully",
"details": {
"to": "recipient@example.com",
"subject": "Email Subject",
"cc": "optional-cc@example.com",
"bcc": "optional-bcc@example.com"
}
}错误响应 (500内部服务器错误):
{
"status": "error",
"message": "Failed to send email: [error details]",
"errorType": "AuthenticationFailedException"
}GET/api/健康
检查服务器运行状况。
响应 (200 OK):
{
"status": "UP",
"timestamp": "2025-08-29T10:30:00Z",
"smtp": {
"status": "UP",
"host": "smtp.gmail.com",
"port": 587
}
}传输协议比较
| 运输 | 用例 | 连接 | 优点 | 缺点 |
|---|---|---|---|---|
| 工作室 | Claude Desktop,直接集成 | 流程管道 | 简单、直接、高效 | 需要流程管理 |
| 上海证券交易所 | Web应用程序,实时 | HTTP/SSE | 实时更新,Web友好 | 设置更复杂 |
| 流式HTTP | 测试,REST客户端 | HTTP/JSON | 易于测试,标准HTTP | 实时效率较低 |
服务器端点(HTTP传输)
| 端点 | 方法 | 描述 |
|---|---|---|
/message | POST | MCP协议端点(可流式HTTP) |
/sse | GET | 服务器发送事件端点 |
/api/test-email | POST | 用于发送电子邮件的REST端点 |
/api/health | GET/POST | 健康检查端点 |
🔗 相关项目
此服务器是综合MCP生态系统的一部分:
1. MCP客户端数据集创建助手
- 目的:使用网络抓取生成AI驱动的数据集
- 整合:使用此SMTP服务器发送完成通知
- 运输:与此服务器的SSE连接
- 用例:自动将生成的数据集通过电子邮件发送给用户
2. AI代理性能测试MCP服务器
- 目的:MCP客户的性能测试和基准测试
- 整合:可以测试此SMTP服务器在负载下的性能
- 特性:负载测试、指标收集、成本分析
- 用例:验证生产场景中的电子邮件服务器性能
3. AI代理性能测试MCP客户端
- 目的:连接到性能测试服务器的客户端应用程序
- 整合:可以将此SMTP服务器用于测试结果通知
- 特性:自动化测试工作流程、结果报告
- 用例:MCP电子邮件工作流的端到端测试
集成示例
使用数据集创建助手
// The dataset assistant sends completion emails like:
{
"to": "data-scientist@company.com",
"subject": "Dataset Generation Complete - 150 samples created",
"body": "Your requested dataset has been generated successfully. Total samples: 150. Processing time: 45 seconds. Dataset available at: /datasets/company-solutions-2025-08-29.json"
}通过性能测试
// Performance test results notification:
{
"to": "devops@company.com",
"subject": "MCP Performance Test Results - Dataset Assistant",
"body": "Performance test completed. Average response time: 12.5s. Success rate: 95%. Total cost: $0.45. Full report attached."
}🐛 故障排除
常见问题
1.身份验证失败
症状:电子邮件发送失败,出现身份验证错误
解决方案:
- 确保您正在使用 应用程序特定密码 适用于Gmail(不是您的帐户密码)
- 验证 2FA已启用 在您的Google帐户上
- 在中仔细检查用户名和密码
Application.java - 使用简单的电子邮件客户端测试SMTP凭据
调试步骤:
# Enable detailed JavaMail debug logging
java -Dmail.debug=true -jar target/RayenMalouche-0.0.1-SNAPSHOT.jar --stdio2.连接被拒绝
症状:无法连接到SMTP服务器
解决方案:
- 检查SMTP服务器设置是否正确
- 验证防火墙是否允许端口587上的出站连接
- 确保TLS设置符合您的SMTP提供程序要求
- 尝试不同的SMTP端口(25、465、587)
网络测试:
# Test SMTP server connectivity
telnet smtp.gmail.com 5873.端口已在使用中
症状:服务器无法启动,出现端口绑定错误
解决方案:
- 服务器使用端口 45450 默认情况下
- 停止使用该端口的任何现有进程
- 或在中修改端口
Application.java
检查端口使用情况:
# Windows
netstat -ano | findstr 45450
# macOS/Linux
lsof -i :454504.MCP检查器连接问题
症状:检查器无法连接到MCP服务器
解决方案:
- 启动检查器之前,请确保服务器正在运行
- 检查是否使用了正确的传输参数(
--stdio,--sse,--streamable-http) - 验证JAR文件路径是否正确且绝对
- 检查服务器日志中的启动错误
5.Claude桌面集成问题
症状:Claude无法识别电子邮件工具
解决方案:
- 验证
config.json文件位置和语法 - 配置更改后重新启动Claude Desktop
- 检查Java路径是否绝对正确
- 确保JAR文件已构建且可访问
- 验证JAVA_HOME环境变量
配置验证:
# Test Java path
"" -version
# Test JAR file
"" -jar "/target/RayenMalouche-0.0.1-SNAPSHOT.jar" --stdio调试模式
启用全面日志记录:
# Full debug mode with JavaMail debugging
java -Dmail.debug=true -Dlogging.level.com.mcp=DEBUG -jar target/RayenMalouche-0.0.1-SNAPSHOT.jar --stdio测试建议
- 从STDIO开始:最容易测试和调试
- 使用REST端点:独立于MCP测试电子邮件功能
- 与检查员核实:确认MCP协议集成工作正常
- 检查日志:监控控制台输出以获取详细的错误消息
- 测试电子邮件传递:发送到您控制的测试电子邮件帐户
- 验证SMTP设置:使用单独的电子邮件客户端验证SMTP凭据
📊 性能与监控
性能特征
- 启动时间:~5-10秒(包括SMTP连接验证)
- 电子邮件发送:每封电子邮件约1-3秒(取决于SMTP服务器)
- 内存使用:~100-200 MB(随Java堆大小而变化)
- 吞吐量:每分钟最多100封电子邮件(适用Gmail费率限制)
监控
健康检查端点
# Check server status
curl http://localhost:45450/api/health
# Expected response
{
"status": "UP",
"smtp": {
"status": "UP",
"host": "smtp.gmail.com",
"port": 587
}
}日志监控
# Monitor real-time logs
java -jar target/RayenMalouche-0.0.1-SNAPSHOT.jar --stdio | tee server.log
# Search for errors
grep -i error server.log
grep -i exception server.log速率限制
Gmail和其他提供商有费率限制:
- Gmail:免费帐户每天约100封电子邮件,付费帐户更高
- 展望:个人账户每天约300封电子邮件
- 雅虎:约100封电子邮件/天
为生产使用实施客户端速率限制。
🔧 依赖项
- 弹簧靴3.5.4:应用程序框架
- MCP SDK 0.11.0:模型上下文协议实现
- Eclipse码头12.0.18:用于HTTP传输的嵌入式服务器
- 雅加达邮报2.0.1:电子邮件发送功能
- 杰克逊2.15.2:JSON处理
- SLF4J+日志:日志框架
🔒 安全说明
生产注意事项
- 从不提交凭据 到版本控制
- 使用 环境变量 对于敏感配置:
export SMTP_USERNAME=your-email@gmail.com
export SMTP_PASSWORD=your-app-password- 实施 速率限制 用于REST端点以防止滥用
- 使用 TLS加密 对于所有SMTP连接
- 考虑 OAuth2 而不是企业部署的应用程序密码
- 验证并净化所有电子邮件输入,以防止注入攻击
环境变量配置
// Example environment variable usage
private static final String SMTP_USERNAME = System.getenv("SMTP_USERNAME");
private static final String SMTP_PASSWORD = System.getenv("SMTP_PASSWORD");🤝 贡献
我们欢迎捐款!以下是如何开始:
开发设置
- 分叉存储库
- 克隆你的叉子:
git clone https://github.com/yourusername/Java-MCP-Server-For-SMTP-Mailing.git- 创建要素分支:
git checkout -b feature/amazing-feature- 进行更改 并进行彻底测试
- 使用所有传输协议进行测试
- 提交拉取请求
代码的风格
- 遵循标准Java约定
- 添加全面的JavaDoc注释
- 包括新功能的单元测试
- 确保所有现有测试通过
测试要求
# Run all tests
mvn test
# Run with different transports
mvn test -Dtest.transport=stdio
mvn test -Dtest.transport=sse
mvn test -Dtest.transport=http📄 许可证
该项目使用Spring Boot和其他开源库。请参阅各个依赖许可证以获取更多信息。
💡 支持
对于问题和疑问:
创建问题
- 错误报告:提供详细的复制步骤
- 功能请求:描述用例和预期行为
- 问题:首先检查现有问题
调试检查表
- ✅ 查看 故障排除部分
- ✅ 检查服务器日志以获取详细的错误消息
- ✅ 使用单独的电子邮件客户端验证SMTP配置
- ✅ 在使用MCP集成之前,使用REST端点进行测试
- ✅ 尝试不同的传输协议来隔离问题
- ✅ 确认Java和Maven版本符合要求
获取帮助
- 文档:查看此README和内联代码注释
- 例子:参见 相关项目 用于集成示例
- 社区:打开GitHub问题以获得社区支持
- 企业:考虑为生产部署提供专业支持
______________________________________________________________________
由以下材料制成❤️ 对于MCP生态系统
*该服务器弥合了人工智能应用程序和电子邮件通信之间的差距,实现了强大的自动化工作流程和无缝的用户通知。*
