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.
 
 
hnu202326010419 ea77fb113d
Merge pull request '保存1.0版本' (#1) from develop into main
4 weeks ago
config 实现用户注册功能(核心功能) 4 weeks ago
logs 增加数据库可视化,增加表结构,优化邮件发送逻辑 4 weeks ago
public 1.0服务器端完成 4 weeks ago
scripts 1.0服务器端完成 4 weeks ago
src smtppop3修复 4 weeks ago
tests 增加数据库可视化,增加表结构,优化邮件发送逻辑 4 weeks ago
README.md 1.0服务器端完成 4 weeks ago
docker-compose.yml 1.0服务器端完成 4 weeks ago
reset_db.sh POP3密码验证完成 4 weeks ago
test_pop3.sh 最简功能 1 month ago
test_smtp.sh POP3密码验证完成 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管理后台

  1. 用户注册测试

  2. 用户管理测试(管理员)

  3. 群发邮件测试(管理员)

  4. 系统设置测试(管理员)

  5. 过滤规则测试

  6. 日志管理测试

查看数据

方法1phpMyAdmin推荐

访问 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配置

功能完成情况

服务器端功能(已完成)

根据课程设计说明书要求,服务器端功能已全部实现:

  1. 邮箱管理

    • 设置用户邮箱大小限制
    • 查看用户邮箱使用情况
  2. 客户管理

    • 创建新客户账号和密码
    • 设置用户权限(管理员/普通用户)
    • 启用/禁用用户
    • 删除客户账号
    • 编辑用户信息
  3. 服务起停

    • SMTP服务状态管理
    • POP3服务状态管理
    • 服务启动/停止控制
  4. 系统设置

    • SMTP端口设置默认25
    • POP3端口设置默认110
    • 服务器域名设置默认test.com
    • 管理员密码修改
    • 邮件过滤(账号过滤)
    • IP地址过滤
  5. 日志管理

    • SMTP日志查看
    • POP3日志查看
    • 日志清除功能
    • 日志存储位置设置
    • 日志文件大小管理
  6. 日常管理

    • 群发邮件功能(发送给所有用户或指定用户)
  7. 帮助

    • 系统使用帮助文档

移动客户端功能(未完成)

根据课程设计说明书要求Android移动客户端尚未实现

  1. 邮件的操作

    • 邮件的发送
    • 邮件的接收
    • 邮件的删除
  2. 用户管理

    • 用户修改自己邮箱的账户密码
    • 新用户注册功能
  3. 管理员管理

    • 管理员远程登录
    • 客户端用户管理(创建、删除、授权、消权、禁用)

简要操作指南

初始化项目

# 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

访问地址