异常:javax.mail.AuthenticationFailedException:连接失败,未指定密码?即使使用PasswordAuthenticator?

异常:javax.mail.AuthenticationFailedException:连接失败,未指定密码?即使使用PasswordAuthenticator?,java,jakarta-mail,Java,Jakarta Mail,我正在制作一个发送电子邮件的java应用程序 出于某种原因,我一直得到javax.mail.AuthenticationFailedException,即使我有正确的用户名和密码 我看到一些帖子说缺少密码验证也可能导致此异常,但我认为我也有这一部分。现在我太困了,不知道哪里出了问题 这是我的密码: import javax.mail.*; import javax.mail.internet.AddressException; import javax.mail.internet.Interne

我正在制作一个发送电子邮件的java应用程序

出于某种原因,我一直得到
javax.mail.AuthenticationFailedException
,即使我有正确的用户名和密码

我看到一些帖子说缺少密码验证也可能导致此异常,但我认为我也有这一部分。现在我太困了,不知道哪里出了问题

这是我的密码:

import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import javax.swing.*;

public class sendEmail {
    private static String subject = "Test", content = "This is a test";

    public sendEmail() {

    }

    public static void send() throws MessagingException{
        Properties properties = new Properties();
        properties.put("mail.smtp.auth","true");// set the authentication to true
        properties.put("mail.smtp.starttls.enable","true");
        properties.put("mail.smtp.host","smtp.gmail.com");
        properties.put("mail.smtp.port","587");
        String username = "clashroyale70532@gmail.com";
        String password = "********";
        Session ses = Session.getInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPassWordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        ses.setDebug(true);
        Message message = prepareMessage(ses,username);
        Transport.send(message);
    }

    private static Message prepareMessage(Session session, String account) {
        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(account));
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(account));
            msg.setSubject(subject);
            msg.setText(content);
            return msg;
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException m) {
            throw new RuntimeException(m);
        }
        return null;
    }
    public static void main(String[] args) {
        try {
            sendEmail.send();
            }
            catch (MessagingException m) {
                m.printStackTrace();
            }
    }

}
以下是JavaMail调试输出:

 DEBUG: setDebug: JavaMail version 1.6.2
    DEBUG: getProvider() returning 
    javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
    DEBUG SMTP: need username and password for authentication
    DEBUG SMTP: protocolConnect returning false, host=smtp.gmail.com, user=*******(name not shown, it's my real name), password=<null>
DEBUG:setDebug:JavaMail版本1.6.2
调试:getProvider()正在返回
javax.mail.Provider[传输,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
调试SMTP:需要用户名和密码进行身份验证
调试SMTP:protocolConnect返回false,host=SMTP.gmail.com,user=*******(未显示姓名,这是我的真实姓名),密码=

它显示的用户与我在代码中使用的电子邮件帐户没有关联。我不确定它是如何得到我的真实姓名的。

你的问题似乎是gmail服务器设置的问题检查此链接是否回答了你的问题?我已经打开了不太安全的应用程序访问。我认为这是一个不同的问题,因为:1。不同的错误名称;2.我成功地用ssl发送了一些电子邮件,而不是用相同帐户的smtp。你是说通过ssl发送smtp吗?是的,我在网上找到了一个使用ssl的教程,我用这种方法成功地发送了电子邮件。当我按照另一个教程将所有内容更改为smtp时,它不起作用。您的问题似乎是gmail服务器设置的问题检查此链接是否回答了您的问题?我已经打开了不太安全的应用程序访问。我认为这是一个不同的问题,因为:1。不同的错误名称;2.我成功地用ssl发送了一些电子邮件,而不是用相同帐户的smtp。你是说通过ssl发送smtp吗?是的,我在网上找到了一个使用ssl的教程,我用这种方法成功地发送了电子邮件。当我按照另一个教程将所有内容更改为smtp时,它不起作用。