You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java邮件发送报ClassFormatError及Yahoo邮箱配置问题求助

解决Hibernate关联邮件发送的ClassFormatError及Yahoo邮箱配置问题

一、搞定java.lang.ClassFormatError: Absent Code attribute错误

这个报错的核心坑点你大概率踩在了依赖冲突上:你引入的javaee-api-6.0.jar里的javax.mail相关类是仅用于编译的“空架子类”——只有类和方法的定义,完全没有可执行的代码逻辑,而你同时又加了包含完整实现的mail.jar,类加载器优先加载了javaee-api里的空类,自然就炸了。

给你两个解决方案,二选一就行:

  • 直接从项目依赖里删掉javaee-api-6.0.jar,mail.jar已经能提供javax.mail的全部功能,这个仅用于编译的API包完全没必要留;
  • 如果你的项目确实需要javaee-api里的其他内容,就调整依赖加载顺序,让mail.jar在类加载路径里排在javaee-api-6.0.jar前面,确保类加载器先读有完整代码的mail.jar。

二、Yahoo邮箱SMTP配置指南

针对yahoo.com和yahoo.co.in两类邮箱,配置规则其实没那么复杂:

通用配置要点

  • 不管是yahoo.com还是yahoo.co.in,官方统一推荐的SMTP服务器地址都是smtp.mail.yahoo.com,不用分开设置不同的主机地址;
  • 端口选这两个里的一个就行:
    • TLS模式:端口填587,记得开启mail.smtp.starttls.enable=true;
    • SSL模式:端口填465,开启mail.smtp.ssl.enable=true;
  • 重点注意:Yahoo现在不让直接用邮箱登录密码发邮件了,必须先在Yahoo账户设置里开启POP/SMTP权限,然后创建应用专用密码,用这个专用密码代替登录密码进行认证。

修改后的Yahoo发送示例代码

import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class YahooEmailSender {
    public static void main(String[] args) {
        try {
            final String fromEmail = "your-yahoo-id@yahoo.com"; // 换成你的yahoo.com或yahoo.co.in邮箱
            final String appPassword = "your-yahoo-app-password"; // 这里填你创建的应用专用密码
            final String toEmail = "recipient@example.com";

            System.out.println("Starting Yahoo mail send...");
            Properties prop = new Properties();
            // 核心SMTP配置
            prop.put("mail.smtp.host", "smtp.mail.yahoo.com");
            prop.put("mail.smtp.port", "587"); // TLS端口
            prop.put("mail.smtp.auth", "true");
            prop.put("mail.smtp.starttls.enable", true);

            Authenticator auth = new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(fromEmail, appPassword);
                }
            };

            Session session = Session.getInstance(prop, auth);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(fromEmail));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
            message.setSubject("Yahoo Mail Test");
            message.setText("Hello from Yahoo SMTP!");

            Transport.send(message);
            System.out.println("Mail sent successfully!");
        } catch (Exception e) {
            System.out.println("Mail send failed:");
            e.printStackTrace();
        }
    }
}

三、给你原有Gmail代码提个醒

你提供的Gmail代码现在大概率跑不通,因为Gmail也早就禁用了直接用账户密码登录SMTP的方式,同样需要开启两步验证后创建应用专用密码,或者改用OAuth2认证,不然会直接报认证失败的错误。

内容的提问来源于stack exchange,提问作者java_jazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:59:50