You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
4 weeks ago | |
|---|---|---|
| config | 4 weeks ago | |
| logs | 4 weeks ago | |
| public | 4 weeks ago | |
| scripts | 4 weeks ago | |
| src | 4 weeks ago | |
| tests | 4 weeks ago | |
| README.md | 4 weeks ago | |
| docker-compose.yml | 4 weeks ago | |
| reset_db.sh | 4 weeks ago | |
| test_pop3.sh | 1 month ago | |
| test_smtp.sh | 4 weeks ago | |
README.md
邮件服务器项目
基于POP3和SMTP协议的邮件服务端实现
环境要求
- Docker & Docker Compose
- PHP 7.4+ (需要扩展: php-mysql, php-sockets)
- WSL2 (Windows环境)
快速开始
1. 安装PHP扩展(如果未安装)
sudo apt update
sudo apt install php php-cli php-mysql php-sockets -y
2. 启动数据库
cd /mnt/d/mailserver/mailserver
# 首次启动或重置数据库
docker-compose down -v
docker-compose up -d
# 等待10-15秒让数据库初始化完成
sleep 15
3. 初始化管理功能数据库表(首次使用)
# 执行管理功能相关的数据库表创建
docker-compose exec mysql mysql -umail_user -puser123 mail_server < scripts/create_admin_tables.sql
4. 查看数据库(phpMyAdmin)
- 访问:http://localhost:8088
- 登录信息:
- 服务器:
mysql(或留空) - 用户名:
root - 密码:
root123
- 服务器:
5. 测试账号
- 管理员:
admin@test.com/123456 - 普通用户:
user1@test.com/123456
端口说明
- 25 - SMTP服务器(发送邮件)
- 110 - POP3服务器(接收邮件)
- 3308 - MySQL数据库
- 8080 - Web管理后台
- 8088 - phpMyAdmin管理界面
启动服务器
SMTP服务器(发送邮件)
sudo php scripts/start_smtp.php
POP3服务器(接收邮件)
sudo php scripts/start_pop3.php
注意:两个服务器需要分别在两个终端运行,都需要sudo权限(因为使用25和110端口)
Web管理后台
启动Web服务器
方式1(推荐):从public目录启动
cd /mnt/d/mailserver/mailserver/public
php -S localhost:8080
方式2:从项目根目录启动
cd /mnt/d/mailserver/mailserver
php -S localhost:8080 -t public
访问管理后台
- 访问:http://localhost:8080
- 登录账号:
- 管理员:
admin@test.com/123456 - 普通用户:
user1@test.com/123456
- 管理员:
功能模块
1. 用户注册
- 页面:
register.php - 功能:新用户注册,邮箱域名限制为 @test.com
2. 用户管理(管理员)
- 页面:
users.php - 功能:
- 创建新用户(设置密码、管理员权限、激活状态)
- 编辑用户信息(修改密码、权限、状态)
- 删除用户账号
- 查看用户列表
3. 邮件管理
- 页面:
emails.php - 功能:
- 查看邮件(管理员查看全部,普通用户查看自己的收件箱)
- 查看邮件详情
- 标记邮件为已读
- 删除邮件
- 分页浏览
4. 群发邮件(管理员)
- 页面:
broadcast.php - 功能:
- 发送给所有用户
- 发送给指定用户列表
- 自定义邮件主题和内容
5. 过滤规则
- 页面:
filters.php - 功能:
- 创建邮箱过滤规则(阻止/允许特定邮箱)
- 创建IP地址过滤规则(阻止/允许特定IP)
- 启用/禁用过滤规则
- 删除过滤规则
6. 系统设置(管理员)
- 页面:
settings.php - 功能:
- 设置SMTP端口(默认25)
- 设置POP3端口(默认110)
- 设置服务器域名(默认test.com)
- 设置用户邮箱大小限制
- 设置日志存储路径和最大大小
- 修改管理员密码
7. 服务管理(管理员)
- 页面:
services.php - 功能:
- 查看SMTP服务状态
- 查看POP3服务状态
- 启动/停止服务(状态管理)
8. 日志管理
- 页面:
logs.php - 功能:
- 查看所有日志
- 按类型过滤(SMTP/POP3)
- 查看日志统计信息
- 清除日志(管理员)
9. 帮助
- 页面:
help.php - 功能:提供系统使用帮助文档
测试方法
测试SMTP(发送邮件)
终端1:启动SMTP服务器
sudo php scripts/start_smtp.php
终端2:连接测试
telnet localhost 25
输入命令:
HELO test
MAIL FROM: <user1@test.com>
RCPT TO: <admin@test.com>
DATA
Subject: 测试邮件
From: user1@test.com
To: admin@test.com
这是一封测试邮件!
.
QUIT
测试POP3(接收邮件)
终端1:启动POP3服务器
sudo php scripts/start_pop3.php
终端2:连接测试
telnet localhost 110
输入命令:
USER admin@test.com
PASS 123456
STAT
LIST
RETR 1
QUIT
测试Web管理后台
-
用户注册测试
- 访问:http://localhost:8080/register.php
- 注册新用户:
newuser@test.com/123456 - 预期:注册成功,跳转到登录页
-
用户管理测试(管理员)
- 登录管理员账号
- 访问:http://localhost:8080/users.php
- 创建、编辑、删除用户
-
群发邮件测试(管理员)
- 访问:http://localhost:8080/broadcast.php
- 选择"发送给所有用户"或"发送给指定用户"
- 填写主题和内容,发送
- 预期:显示成功发送数量
-
系统设置测试(管理员)
- 访问:http://localhost:8080/settings.php
- 修改端口、域名、邮箱大小等设置
- 修改管理员密码
-
过滤规则测试
- 访问:http://localhost:8080/filters.php
- 创建邮箱过滤规则和IP过滤规则
- 测试启用/禁用功能
-
日志管理测试
- 访问:http://localhost:8080/logs.php
- 查看日志列表,按类型过滤
- 测试清除日志功能(管理员)
查看数据
方法1:phpMyAdmin(推荐)
访问 http://localhost:8088,选择 mail_server 数据库
方法2:命令行
# 查看用户
docker-compose exec mysql mysql -umail_user -puser123 mail_server -e "SELECT * FROM users;"
# 查看邮件
docker-compose exec mysql mysql -umail_user -puser123 mail_server -e "SELECT id, sender, recipient, subject, created_at FROM emails ORDER BY id DESC;"
重置数据库
docker-compose down -v
docker-compose up -d
sleep 15
# 重新执行初始化脚本
docker-compose exec mysql mysql -umail_user -puser123 mail_server < scripts/create_admin_tables.sql
常见问题
端口被占用
SMTP服务器启动失败(25端口)
# 检查端口占用
sudo netstat -tlnp | grep 25
# 或使用
sudo lsof -i :25
POP3服务器启动失败(110端口)
sudo netstat -tlnp | grep 110
数据库连接失败
# 检查Docker容器状态
docker-compose ps
# 查看数据库日志
docker-compose logs mysql
# 重启数据库
docker-compose restart mysql
telnet连接失败
# 安装telnet(如果未安装)
sudo apt install telnet
# 或使用nc替代
nc localhost 25
密码验证失败
- 确认使用正确的测试账号:
admin@test.com/123456 - 如果重置了数据库,密码会恢复为
123456
项目结构
mailserver/
├── scripts/ # 启动脚本和SQL
│ ├── start_smtp.php # 启动SMTP服务器
│ ├── start_pop3.php # 启动POP3服务器
│ ├── create_tables.sql # 数据库初始化脚本
│ └── create_admin_tables.sql # 管理功能数据库表
├── src/ # 源代码
│ ├── protocol/ # SMTP/POP3协议实现
│ │ ├── SmtpServer.php
│ │ └── Pop3Server.php
│ ├── storage/ # 数据存储层
│ │ ├── Database.php
│ │ ├── UserRepository.php
│ │ ├── EmailRepository.php
│ │ ├── SystemSettingsRepository.php
│ │ ├── FilterRepository.php
│ │ ├── ServiceRepository.php
│ │ └── MailboxRepository.php
│ ├── admin/ # 管理后台逻辑
│ │ └── BroadcastService.php
│ └── utils/ # 工具类
│ ├── Security.php
│ └── Validator.php
├── public/ # Web管理界面
│ ├── index.php # 主页面(登录+仪表盘)
│ ├── register.php # 用户注册
│ ├── logout.php # 退出登录
│ ├── users.php # 用户管理
│ ├── emails.php # 邮件管理
│ ├── broadcast.php # 群发邮件
│ ├── filters.php # 过滤规则
│ ├── settings.php # 系统设置
│ ├── services.php # 服务管理
│ ├── logs.php # 日志管理
│ └── help.php # 帮助
├── config/ # 配置文件
│ ├── database.php # 数据库配置
│ └── constants.php # 常量定义
└── docker-compose.yml # Docker配置
功能完成情况
✅ 服务器端功能(已完成)
根据课程设计说明书要求,服务器端功能已全部实现:
-
✅ 邮箱管理
- 设置用户邮箱大小限制
- 查看用户邮箱使用情况
-
✅ 客户管理
- 创建新客户账号和密码
- 设置用户权限(管理员/普通用户)
- 启用/禁用用户
- 删除客户账号
- 编辑用户信息
-
✅ 服务起停
- SMTP服务状态管理
- POP3服务状态管理
- 服务启动/停止控制
-
✅ 系统设置
- SMTP端口设置(默认25)
- POP3端口设置(默认110)
- 服务器域名设置(默认test.com)
- 管理员密码修改
- 邮件过滤(账号过滤)
- IP地址过滤
-
✅ 日志管理
- SMTP日志查看
- POP3日志查看
- 日志清除功能
- 日志存储位置设置
- 日志文件大小管理
-
✅ 日常管理
- 群发邮件功能(发送给所有用户或指定用户)
-
✅ 帮助
- 系统使用帮助文档
❌ 移动客户端功能(未完成)
根据课程设计说明书要求,Android移动客户端尚未实现:
-
❌ 邮件的操作
- 邮件的发送
- 邮件的接收
- 邮件的删除
-
❌ 用户管理
- 用户修改自己邮箱的账户密码
- 新用户注册功能
-
❌ 管理员管理
- 管理员远程登录
- 客户端用户管理(创建、删除、授权、消权、禁用)
简要操作指南
初始化项目
# 1. 启动数据库
cd /mnt/d/mailserver/mailserver
docker-compose up -d
sleep 15
# 2. 初始化管理功能数据库表
docker-compose exec mysql mysql -umail_user -puser123 mail_server < scripts/create_admin_tables.sql
# 3. 启动Web服务器
php -S localhost:8080 -t public
日常使用
# 启动SMTP服务器(终端1)
sudo php scripts/start_smtp.php
# 启动POP3服务器(终端2)
sudo php scripts/start_pop3.php
# 启动Web管理后台(终端3)
php -S localhost:8080 -t public
访问地址
- Web管理后台:http://localhost:8080
- phpMyAdmin:http://localhost:8088
- SMTP服务器:localhost:25
- POP3服务器:localhost:110