讲师中心 微信公众号
AI工具推荐 视频效率加速

Java初学者项目实战:构建基本的电子邮件客户端

千强同学_3907

千强同学_3907

发布时间:2026-02-03 02:41:28

|

840人浏览过

|

来源于php中文网

原创

Java初学者应使用jakarta.mail替代已废弃的javax.mail,因JDK 9+模块化移除了java.activation,旧版会抛NoClassDefFoundError;需显式引入jakarta.mail-api和com.sun.mail:jakarta.mail依赖,并正确配置TLS/SSL、应用专用密码及Authenticator。

java初学者项目实战:构建基本的电子邮件客户端

Java初学者直接写完整邮件客户端容易卡在认证、SSL、协议细节上,不建议从零手撸 SMTP/IMAP 协议栈。用 javax.mail(现为 jakarta.mail)是合理起点,但要注意 JDK 11+ 默认不包含它,且旧版 javax.mail:mail 已废弃。

为什么 javax.mail 会抛 NoClassDefFoundError 或 ClassNotFoundException

因为 JDK 9 开始模块化,java.activation 和邮件 API 全被移出默认 classpath;JDK 11 彻底删除 java.activation 模块。即使加了旧 jar,也会因缺少 javax.activation.DataSource 等类失败。

  • ✅ 正确做法:改用 jakarta.mail:jakarta.mail-api + com.sun.mail:jakarta.mail(推荐 2.0.1+)
  • ❌ 不要再用 javax.mail:mail:1.6.2 或更老版本
  • 若用 Maven,必须显式声明依赖,不能指望 JDK 自带
<dependency>
  <groupId>jakarta.mail</groupId>
  <artifactId>jakarta.mail-api</artifactId>
  <version>2.1.3</version>
</dependency>
<dependency>
  <groupId>com.sun.mail</groupId>
  <artifactId>jakarta.mail</artifactId>
  <version>2.0.1</version>
</dependency>

Session.getInstance(...) 和 Session.getDefaultInstance(...) 的区别与风险

后者已被标记为 @Deprecated,且线程不安全:多个线程调用会共享同一 Session 实例,导致配置(如密码、host)被覆盖。前者才是标准用法,但需传入 Properties 和可选的 Authenticator。

  • SMTP 发信必须设 mail.smtp.auth = "true",否则 Gmail/Outlook 等拒绝连接
  • 务必启用 TLS:mail.smtp.starttls.enable = "true"(Gmail 端口 587)或 SSL:mail.smtp.ssl.enable = "true"(端口 465)
  • 避免硬编码密码——用 Authenticator 子类延迟提供凭据,防止日志泄露
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");

Session session = Session.getInstance(props, new Authenticator() {
  protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("user@gmail.com", "app-password-here");
  }
});

收邮件时 Store.connect(...) 报 AuthenticationFailedException 的常见原因

Gmail/Outlook 等已停用“用户名+密码”直连,必须用应用专用密码(App Password)或 OAuth2。普通网页登录密码无效,且开启两步验证后才可生成应用密码。

Browser Session Manager
Browser Session Manager

使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能

下载

立即学习“Java免费学习笔记(深入)”;

  • Gmail:进入 Google 账户 → 安全 → 两步验证 → 应用专用密码(选“邮件”,生成 16 位密码)
  • Outlook:账户安全设置 → 高级安全选项 → 应用密码
  • IMAP 设置必须匹配:Gmail 是 imap.gmail.com:993,mail.imaps.enable = "true",且用 Store.connect(host, user, password)
  • 别漏掉 folder.open(Folder.READ_ONLY),否则 getMessages() 返回空数组

初学者最容易忽略的权限与安全细节

本地测试时,IDE 运行的 Java 进程可能被系统防火墙拦截出站连接;企业网络常屏蔽 465/587/993 端口;而 Gmail 对异常登录行为(如新设备、非浏览器 UA)会静默拒收或进垃圾箱。

  • 发信后检查收件箱和垃圾邮件文件夹——Gmail 可能标记为“未加密发送”并降权
  • 收信前先 telnet 测试端口连通性:telnet smtp.gmail.com 587(需安装 telnet 客户端)
  • 不要在代码里写死邮箱密码,哪怕只是 demo;至少用 System.console().readPassword() 交互输入
  • 收到 javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted 时,90% 是密码错或未开应用专用密码

真正跑通收发,关键不在写多少行代码,而在确认每层协议(DNS 解析、TCP 连接、TLS 握手、SMTP/IMAP 认证)是否逐级通过。卡住时优先查网络和账号设置,而不是重写 Java 逻辑。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

4000

2025.09.15

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

369

2026.05.09

Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

4000

2025.09.15

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

369

2026.05.09

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1926

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6087

2023.07.18

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn