AI驱动:90分钟Maven项目实战入门——邮件群发工具
📧 Java邮件群发工具开发实战:从零到一完整指南
📋 目录
🎯 表格教学目标
| 教学目标 | 详细说明 |
|---|---|
| 🎯 核心目标 | 让学生体验"在AI辅助下,从零创建Maven项目,引入一个第三方库,并跑通一个核心功能"的全流程 |
| ⏱️ 时间安排 | 90分钟极简版 |
| 🛠️ 技术栈 | 仅保留 Apache POI (xlsx) |
| 📝 功能要求 | 1. 读取预设的Excel文件(可通过AI生成) 2. 解析第一行数据 3. 控制台打印姓名和邮箱 |
| 🚀 项目定位 | 邮件群发工具 - 读取Excel,打印联系人信息 |
📋 项目概述
邮件群发工具是一个基于Java的命令行应用程序,主要功能包括:
- 读取Excel格式的联系人文件
- 解析并显示联系人详细信息
- 统计各部门人数分布
- 支持动态添加新联系人
- 为后续邮件发送功能提供数据支持
🛠️ 技术栈
- Java 8+ - 核心编程语言
- Apache POI 5.4.0 - Excel文件处理
- Maven - 项目依赖管理
- Git - 版本控制
🚀 90分钟快速开发流程
阶段一:项目搭建(15分钟)
1.1 创建Maven项目
# 在IDEA中创建新项目
New Project → Maven → JDK 8
GroupId: org.example
ArtifactId: EmailGroupSender
Version: 1.0-SNAPSHOT
1.2 极简pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>EmailGroupSender</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 仅保留核心依赖 -->
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.4.0</version>
</dependency>
</dependencies>
</project>
阶段二:核心功能开发(50分钟)
2.1 创建联系人实体类(10分钟)
package com.example;
public class Contact {
private String name;
private String email;
private String department;
// 构造方法、getter/setter、toString
public boolean isValid() {
return name != null && !name.trim().isEmpty() &&
email != null && !email.trim().isEmpty();
}
}
2.2 生成示例Excel文件(10分钟)
// 让AI生成一个简单的Excel生成器
public class ExcelGenerator {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("联系人");
// 创建表头
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("姓名");
header.createCell(1).setCellValue("邮箱");
header.createCell(2).setCellValue("部门");
// 创建示例数据
String[][] data = {
{"张三", "zhangsan@example.com", "技术部"},
{"李四", "lisi@example.com", "市场部"}
};
// 保存文件到 data/contacts.xlsx
// ... 完整代码
}
}
2.3 核心功能:读取Excel并打印(30分钟)
package com.example;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
public class ExcelReader {
public static void main(String[] args) {
System.out.println("=== 邮件群发工具 - 核心功能演示 ===");
try {
// 1. 读取Excel文件
List<Contact> contacts = readExcel("data/contacts.xlsx");
// 2. 打印结果(满足极简要求)
System.out.println("\n📋 联系人信息:");
System.out.println("姓名\t\t邮箱");
System.out.println("----------------------------");
for (Contact contact : contacts) {
System.out.println(contact.getName() + "\t\t" + contact.getEmail());
}
System.out.println("\n✅ 核心功能完成!共读取 " + contacts.size() + " 个联系人");
} catch (Exception e) {
System.err.println("❌ 错误: " + e.getMessage());
}
}
public static List<Contact> readExcel(String filePath) throws Exception {
List<Contact> contacts = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0);
// 跳过表头,从第二行开始
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row != null) {
Contact contact = new Contact();
contact.setName(getCellValue(row.getCell(0)));
contact.setEmail(getCellValue(row.getCell(1)));
contact.setDepartment(getCellValue(row.getCell(2)));
if (contact.isValid()) {
contacts.add(contact);
}
}
}
}
return contacts;
}
private static String getCellValue(Cell cell) {
if (cell == null) return "";
return cell.getStringCellValue();
}
}
阶段三:测试与优化(25分钟)
3.1 运行测试(5分钟)
预期输出:
=== 邮件群发工具 - 核心功能演示 ===
📋 联系人信息:
姓名 邮箱
----------------------------
张三 zhangsan@example.com
李四 lisi@example.com
✅ 核心功能完成!共读取 2 个联系人
3.2 添加简单扩展(20分钟)
// 扩展1:添加新联系人
public class AddContact {
public static void addContact(String name, String email, String department) {
// 打开现有Excel,添加新行
}
}
// 扩展2:统计信息
public class Statistics {
public static void showStats(List<Contact> contacts) {
System.out.println("\n📊 简单统计:");
System.out.println("总人数: " + contacts.size());
// 按部门统计
Map<String, Integer> deptCount = new HashMap<>();
for (Contact c : contacts) {
String dept = c.getDepartment();
deptCount.put(dept, deptCount.getOrDefault(dept, 0) + 1);
}
for (Map.Entry<String, Integer> entry : deptCount.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue() + "人");
}
}
}
🎯 90分钟学习目标达成清单
| 时间 | 学习目标 | 完成标志 |
|---|---|---|
| 0-15分钟 | 创建Maven项目并配置依赖 | 能成功编译项目 |
| 16-30分钟 | 理解Apache POI基本用法 | 能生成示例Excel文件 |
| 31-60分钟 | 实现核心读取功能 | 控制台正确打印联系人 |
| 61-75分钟 | 处理常见错误 | 能处理文件不存在等异常 |
| 76-90分钟 | 简单功能扩展 | 能添加统计或新增联系人功能 |
1.按照预期输出结构如下图:

2.在excel表中添加新信息(上部分),更新后呈现(下部分),如下图中红笔勾画部分:

🚨 常见问题快速解决
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 依赖下载失败 | IDEA报红,找不到类 | 1. 检查网络 2. 使用阿里云镜像 3. 手动下载jar包 |
| Excel格式错误 | 读取时数据错位 | 1. 检查Excel列顺序 2. 使用代码重新生成 3. 验证文件编码 |
| 中文乱码 | 控制台显示乱码 | 1. 设置控制台编码为UTF-8 2. 检查文件保存编码 |
1.后缀xlsx文件应该用excel打开,而不是记事本(为乱码),如下图对比:

🌟 未来展望联系学期末课程设计
基于本次90分钟课堂实践的邮件群发工具基础版,可以在学期末课程设计中扩展为可视化邮件管理系统,重点在管理员后台和用户前端两个维度进行突破与完善:
一、管理员后台:可视化监控与验证
1. 数据看板可视化
- 实时监控面板:仪表盘展示发送成功率、打开率、点击率等核心指标
- 联系人分布图:使用ECharts可视化展示各部门联系人分布
- 发送趋势分析:折线图展示历史发送数据,支持时间筛选
2. 发送流程验证
- 发送前校验系统:邮箱格式验证、内容安全检查、发送频率控制
- A/B测试框架:支持不同模板/发送时间的对比测试
- 沙箱测试环境:模拟发送流程,预览实际效果
3. 报表系统
- 发送统计报表:Excel/PDF格式的详细发送报告
- 联系人分析报告:活跃度分析、分组效果对比
- 系统监控告警:异常情况自动通知,问题追踪日志
二、用户前端:可视化操作界面
1. 联系人管理界面
- 可视化数据导入:拖拽上传Excel文件,实时预览导入数据
- 联系人分组管理:树状结构展示分组,支持拖拽分组
- 批量操作界面:可视化选择、筛选、批量发送
2. 邮件模板可视化编辑
- 拖拽式编辑器:组件化邮件模板设计,所见即所得
- 实时预览功能:编辑时同步预览不同设备显示效果
- 模板库管理:分类存储常用模板,支持一键复用
3. 发送过程可视化
- 进度条显示:实时显示发送进度和状态
- 结果反馈界面:发送成功/失败的可视化提示
- 历史记录查询:可视化查询和筛选发送记录
通过这样的课程设计扩展,未来将掌握:
- 数据可视化技术:ECharts图表集成
- 用户界面设计:JavaFX或Web前端开发
- 系统验证方法:完整的测试和验证流程
- 实际应用能力:从命令行工具到可视化系统的升级路径
从简单的控制台输出到完整的可视化管理系统,这一演进路径体现了现代软件开发的核心价值:让复杂的技术对用户透明,让数据变得直观可见。
📝 项目总结
本次90分钟课堂实践不仅让我掌握了Maven项目管理、Apache POI操作等核心技术,有效合理的AI助学,以及idea中插件Lingma插件的辅助,更重要的是培养了"遇到需求→寻找工具→集成使用→解决问题"的工程思维。这为后续的深入学习和技术提升奠定了坚实基础。
从命令行工具到企业级系统的演进路径,展现了Java技术的强大扩展性和应用广度。希望同学们能够以本次实践为起点,在Java开发的道路上持续探索,不断突破。
学习之旅永无止境,每一次代码的编写都是向优秀开发者迈进的一步。
致未来的Java工程师:保持好奇,坚持实践,勇于挑战。今天的课堂小工具,可能就是明天改变世界的创新起点。
#Java入门 #项目实践 #Maven学习 #ApachePOI #编程入门 #技术成长

浙公网安备 33010602011771号