java mail javax.mail.AuthenticationFailedException

java mail javax.mail.AuthenticationFailedException,java,struts2,jakarta-mail,Java,Struts2,Jakarta Mail,您好,我已经编写了一个使用java mail从服务器发送邮件的代码 这是我的密码 Properties pros = new Properties(); pros.put("mail.smtp.host", "my Ip Adress"); pros.put("mail.smtp.auth", "true"); pros.put("mail.smtp.port", "25"); Session mailSession = Session.getDefaultInstance(pros,

您好,我已经编写了一个使用java mail从服务器发送邮件的代码

这是我的密码

Properties pros = new Properties();
pros.put("mail.smtp.host", "my Ip Adress");
pros.put("mail.smtp.auth", "true");
pros.put("mail.smtp.port", "25");
Session mailSession = Session.getDefaultInstance(pros,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("emailId","password");
                }
            });
Message message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress("sendingAddress"));
message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("recieverAddress"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler," +
                    "\n\n No spam to my email, please!");
Transport.send(message);
return "SUCCESS";
我在代码中提供的所有细节都是正确的,我指的是属性设置,我已经检查过了。但不幸的是,它显示了一些错误消息,如身份验证失败

错误消息如下所示

javax.mail.AuthenticationFailedException
有人知道这件事吗


我正在为我的项目使用struts2框架。

使用此代码。。!您使用的是从邮件服务器获取身份验证的传统方法

import java.util.*;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Message;
public void Mail(String to[], String subject, String content_message)
        throws MessagingException {

    boolean debug = false;

    try {
        String host = "smtp.gmail.com";
        String from = "yourmail@gmail.com";
        String pass = "yourpwd";
        Properties props = System.getProperties();
        props.put("mail.smtp.starttls.enable", "true"); 
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", from);
        props.put("mail.smtp.password", pass);
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, null);
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        InternetAddress[] toAddress = new InternetAddress[to.length];
        for (int i = 0; i < to.length; i++) { 
            toAddress[i] = new InternetAddress(to[i]);
        }
        System.out.println(Message.RecipientType.TO);
        for (int i = 0; i < toAddress.length; i++) { 
            message.addRecipient(Message.RecipientType.TO, toAddress[i]);
        }
        message.setSubject(subject);

        message.setContent(content_message, "text/html; charset=\"UTF-8\"");
        Transport transport = session.getTransport("smtp");
        transport.connect(host, from, pass);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

    catch (Exception e) {
        System.out.println("Unable to connect");
    }
}
import java.util.*;
导入javax.mail.MessaginException;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.mimessage;
导入javax.mail.Message;
公共无效邮件(字符串到[],字符串主题,字符串内容\消息)
抛出消息异常{
布尔调试=假;
试一试{
String host=“smtp.gmail.com”;
字符串from=”yourmail@gmail.com";
字符串pass=“yourpwd”;
Properties props=System.getProperties();
props.put(“mail.smtp.starttls.enable”、“true”);
props.put(“mail.smtp.host”,host);
props.put(“mail.smtp.user”,from);
props.put(“mail.smtp.password”,pass);
props.put(“mail.smtp.port”,“587”);
props.put(“mail.smtp.auth”,“true”);
Session Session=Session.getDefaultInstance(props,null);
MimeMessage message=新MimeMessage(会话);
message.setFrom(新的InternetAddress(from));
InternetAddress[]toAddress=新的InternetAddress[to.length];
对于(int i=0;i

在需要发送邮件时调用构造函数。

有关类似问题,请参阅类似线程注意,没有“mail.smtp.password”属性,因此没有理由设置它。还要注意,您确实应该使用Session.getInstance()而不是Session.getDefaultInstance()。这段代码对我来说非常适合。无论如何,在得到一些确认后,我会根据您的建议更正我的代码。谢谢你的参与。!