您的位置:首页 >JavaMail发送邮件教程及工具说明
发布于2026-02-23 阅读(0)
扫一扫,手机访问
JavaMail发送邮件必须正确配置host、port、TLS/SSL及认证参数,使用Authenticator提供凭据,纯文本/HTML/附件邮件构建方式不同,且JDK11+/Spring Boot 3+需迁移到Jakarta Mail。

不配对 mail.smtp.host、mail.smtp.port 和认证开关,javax.mail.AuthenticationFailedException 几乎必现。Gmail、Outlook、企业邮箱的端口和 TLS/SSL 要求各不相同:
smtp.gmail.com,端口 587(STARTTLS)或 465(SSL),必须开启 mail.smtp.auth 且关闭 mail.smtp.ssl.enable(587 时);若用 465,则设 mail.smtp.ssl.enable=truesmtp.qq.com,端口 587,mail.smtp.starttls.enable=true,不能开 ssl.enablemail.smtp.ssl.trust 指定主机名,否则抛 javax.net.ssl.SSLHandshakeExceptionSession.getInstance(props, new Authenticator()) 中的 Authenticator 子类必须重写 getPasswordAuthentication(),返回含用户名密码的 PasswordAuthentication 对象。常见错误包括:
null 或空字符串给 new PasswordAuthentication(...) → 登录被拒user@gmail.com)作用户名,但某些 SMTP 服务只要求前缀(user)别指望一个 MimeMessage 实例能同时满足两类需求。核心区别在 Multipart 的嵌套结构:
message.setText("hello", "UTF-8") 即可,不用 Multipartmessage.setContent(htmlStr, "text/html; charset=UTF-8")MimeMultipart("mixed") 作为根容器,再往里加 MimeBodyPart(正文)和另一个 MimeBodyPart(附件),附件需调用 bodyPart.attachFile(file) 并设 bodyPart.setFileName(...)漏掉 multipart.addBodyPart(...) 任意一次,附件就发不出去,且无报错提示。
如果你用的是 JDK 11+ 或 Spring Boot 3+,旧版 javax.mail 已不可用。必须切换到 Jakarta 命名空间:
com.sun.mail:javax.mail 改为 com.sun.mail:jakarta.mailjavax.mail.Session → jakarta.mail.Session,javax.mail.internet.MimeMessage → jakarta.mail.internet.MimeMessagejavax.mail.jar 的残留引用,得检查 lib/ 目录和 Maven 的 dependency:tree混淆这两个命名空间会导致运行时报 NoClassDefFoundError 或编译期找不到符号,尤其在混合使用 Spring Framework 5.x(用 javax)和 6.x(用 jakarta)的项目里特别容易踩坑。
上一篇:糖豆APP如何将字体变大
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9