基于90分钟Maven项目实战入门——邮件群发工具(模拟版)

目录索引

前言:基于90分钟Maven项目实战入门作业,利用AI辅助编写了一个Maven项目,侧重功能读取Excel,打印联系人信息,虽然群发功能有待完善,学习所谓底层逻辑,日后课程设计中添加有真正的SMTP,使用SSL/TLS加密,真正的授权码认证,以及验证正确功能与否。

教学目标表格

教学目标 详细说明
核心目标 让学生体验"在AI辅助下,从零创建Maven项目,引入一个第三方库,并跑通一个核心功能"的全流程
技术栈 仅保留 Apache POI (xlsx)
功能要求 1. 读取预设的Excel文件(可通过AI生成)
2. 解析第一行数据
3. 控制台打印姓名和邮箱

程序功能与核心实现

这个工具的核心功能是 读取Excel格式的联系人表,并模拟邮件的群发过程

  1. 读取Excel联系人:程序能读取一个预设的contacts.xlsx文件,解析其中的姓名和邮箱等信息,可以增减添加联系人信息。
  2. 模拟邮件群发:程序会遍历所有联系人,模拟“发送”过程,为每个收件人个性化生成邮件内容,并在控制台打印发送日志。

这里最关键的部分是 “读取Excel联系人” :了解Maven项目,pom.xml,POI 等知识。

关键代码一览

这个Maven项目的依赖配置清晰完整,支撑了项目的两大核心功能(文件读取、邮件发送):

1. 完整的项目依赖 (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>
        <!-- Apache POI 核心:处理所有OLE2文档(.xls) -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.4.0</version>
        </dependency>
        <!-- Apache POI扩展:处理OOXML文档(.xlsx) -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.4.0</version>
        </dependency>
        <!-- 最稳定的JavaMail依赖 -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
    </dependencies>
</project>

依赖解析poi 是核心库,能处理旧版 .xls 格式;而 poi-ooxml 是扩展库,专门用于处理新版 .xlsx 格式,两者必须同时声明。javax.mail 为后续扩展真实发送功能预留。

2. POI读取Excel并打印的核心逻辑
POI库的API设计直观,其核心对象模型遵循 Workbook -> Sheet -> Row -> Cell 的层级结构。

// 1. 加载Excel文件,创建Workbook对象(代表整个工作簿)
FileInputStream fis = new FileInputStream("contacts.xlsx");
Workbook workbook = new XSSFWorkbook(fis); // XSSF用于.xlsx, HSSF用于.xls

// 2. 获取第一个工作表 (Sheet)
Sheet sheet = workbook.getSheetAt(0);

// 3. 遍历行 (Row)
for (Row row : sheet) {
    // 4. 遍历单元格 (Cell) 并读取值
    // 假设第1列是姓名,第2列是邮箱
    String name = row.getCell(0).getStringCellValue();
    String email = row.getCell(1).getStringCellValue();
    
    // 控制台打印
    System.out.printf("姓名:%s, 邮箱:%s%n", name, email);
}
workbook.close();

POI的核心优势

1. 统一的API接口

POI最让我欣赏的一点是它为不同版本的Excel文件提供了统一的编程接口。无论是老式的.xls(HSSF)还是新式的.xlsx(XSSF/SXSSF)格式,我们都可以使用几乎相同的代码来操作:

// 读取.xlsx文件
Workbook workbook1 = new XSSFWorkbook(new File("data.xlsx"));

// 读取.xls文件  
Workbook workbook2 = new HSSFWorkbook(new File("data.xls"));

// 后续操作完全一致
Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);

这种设计极大简化了学习成本,我们不需要为不同文件格式编写两套代码。

3. 模拟群发核心逻辑
核心在于遍历联系人并生成个性化内容,这部分代码清晰展示了业务逻辑:

public static void sendBulkEmail(List<Contact> contacts, String subject, String baseContent) {
    for (Contact contact : contacts) {
        // 核心:为每个联系人个性化邮件内容
        String personalizedContent = "尊敬的" + contact.getName() + ":\n\n" 
                                   + baseContent 
                                   + "\n\n(来自:" + contact.getDepartment() + ")";
        
        // 模拟发送:在控制台打印结果,而非真实网络传输
        System.out.println("[模拟]发送至:" + contact.getEmail());
        System.out.println("     内容预览:" + personalizedContent.substring(0, Math.min(30, personalizedContent.length())) + "...");
        
        // 模拟网络延迟
        try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); }
    }
}

可以看到,personalizedContent的拼接是真实可用的业务逻辑,但“发送”动作被简化为了控制台打印。

功能展示

界面显示:
{45AF7299-497B-446D-B88B-67A3F37E720B}
显示Excel数据(在Excel数据更新后,自动添加)):
e6a819bc7df09add48b473bde9c94d48
群发功能(模拟):
{8174A5DC-CEA1-41D1-A38A-3F68CBE21BEC}

项目实践中的个人收获

1. Maven项目管理的优势

从0到创建Maven项目,减少了下载jar包的冗杂性,Maven通过pom.xml文件将依赖管理规范化,自动处理所有依赖关系,大大提高了效率

2. 结合生活,熟悉邮件发送的底层逻辑

在实现模拟功能的过程中,我仅仅用内部的一次函数调用和打印输出模拟发送过程,真实需要通过SMTP协议与远程邮件服务器通信,建立Socket连接,进行TLS/SSL加密握手,日后应该使用javax.mail库建立连接、进行认证、发送协议命令的代码

对比维度 模拟发送 (我的当前程序) 真实邮件发送
核心动作 在控制台打印(System.out) 通过SMTP协议与远程邮件服务器通信
网络交互 需建立Socket连接,进行TLS/SSL加密握手
协议流程 遵循复杂命令交互 (HELO, AUTH, MAIL FROM, DATA, QUIT等)
结果反馈 程序自己说了算,总是“成功” 邮件服务器返回真实状态码(如250 OK, 550 用户不存在
核心目的 验证业务流程、调试逻辑、安全演示 完成真实的邮件投递任务

课设准备:真实群发邮件实现

以此模拟工具为基础,在正确的业务逻辑骨架:读取数据、处理内容、循环发送,为其注入完善——替换为真实的邮件发送功能

我需要做的就是:

  1. 完善核心:将sendBulkEmail方法里打印日志的代码,替换为使用javax.mail库建立连接、进行认证、发送协议命令的代码。
  2. 联系生活:处理好真实的网络异常、服务器反馈和失败重试机制。
  3. 优化体验:或许可以添加一个图形界面(GUI),让操作更直观。
posted @ 2025-12-23 22:26  Jbuckle  阅读(2)  评论(0)    收藏  举报