使用javax mail访问需要SSO登录的outlook电子邮件时出错

使用javax mail访问需要SSO登录的outlook电子邮件时出错,outlook,jakarta-mail,imap,pop3,Outlook,Jakarta Mail,Imap,Pop3,我正在尝试使用javax-mail读取组织内的outlook电子邮件,但不断收到错误-“javax.mail.AuthenticationFailedException:登录失败:未知用户名或错误密码。” 需要注意的一点是,登录outlook时需要进行一次登录。因此,您必须输入相同的凭据(emailID/密码)两次 以下是我的密码- public static void main(String[] args) { String host = "pop.outlook.com";

我正在尝试使用javax-mail读取组织内的outlook电子邮件,但不断收到错误-“javax.mail.AuthenticationFailedException:登录失败:未知用户名或错误密码。”

需要注意的一点是,登录outlook时需要进行一次登录。因此,您必须输入相同的凭据(emailID/密码)两次

以下是我的密码-

public static void main(String[] args) {
    String host = "pop.outlook.com";
    String mailStoreType = "pop3";
    String username = "firstname.lastname@companyName.com";
    String password = "password";
    check(host, mailStoreType, username, password);
}

public static void check(String host, String mailStoreType, String user, String password)
{
    try {
        //create properties field
        Properties props = new Properties();
        props.setProperty("mail.pop3.ssl.enable", "true");
        props.setProperty("mail.pop3.auth.plain.disable", "true");
        props.put("mail.pop3.host", host);
        props.put("mail.pop3.port", "995");
        props.setProperty("mail.pop3.starttls.enable", "true");
        Session emailSession = Session.getDefaultInstance(props);

        //create the POP3 store object and connect with the pop server
        Store store = emailSession.getStore(mailStoreType);
        store.connect(host, user, password);

        //create the folder object and open it
        Folder emailFolder = store.getFolder("INBOX");
        emailFolder.open(Folder.READ_ONLY);

        // retrieve the messages from the folder in an array and print it
        Message[] messages = emailFolder.getMessages();
        Logger.logConsoleMessage("messages.length---" + messages.length);

        for (int i = 0, n = messages.length; i < n; i++) {
            Message message = messages[i];
            Logger.logConsoleMessage("---------------------------------");
            Logger.logConsoleMessage("Email Number " + (i + 1));
            Logger.logConsoleMessage("Subject: " + message.getSubject());
            Logger.logConsoleMessage("From: " + message.getFrom()[0]);
            Logger.logConsoleMessage("Text: " + message.getContent().toString());
        }
        //close the store and folder objects
        emailFolder.close(false);
        store.close();

    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
publicstaticvoidmain(字符串[]args){
String host=“pop.outlook.com”;
字符串mailStoreType=“pop3”;
String username=“firstname。lastname@companyName.com";
字符串password=“password”;
检查(主机、邮箱类型、用户名、密码);
}
公共静态无效检查(字符串主机、字符串mailStoreType、字符串用户、字符串密码)
{
试一试{
//创建属性字段
Properties props=新属性();
setProperty(“mail.pop3.ssl.enable”、“true”);
setProperty(“mail.pop3.auth.plain.disable”、“true”);
props.put(“mail.pop3.host”,host);
props.put(“mail.pop3.port”,“995”);
setProperty(“mail.pop3.starttls.enable”、“true”);
会话emailSession=Session.getDefaultInstance(props);
//创建POP3存储对象并连接pop服务器
Store Store=emailSession.getStore(mailStoreType);
store.connect(主机、用户、密码);
//创建文件夹对象并将其打开
文件夹emailFolder=store.getFolder(“收件箱”);
emailFolder.open(文件夹只读);
//从数组中的文件夹中检索邮件并打印
Message[]messages=emailFolder.getMessages();
Logger.logConsoleMessage(“messages.length----”+messages.length);
for(int i=0,n=messages.length;i

在对上面的代码稍作调整后,我能够访问gmail帐户,这使我相信上面的错误是由于SSO需要额外的身份验证。有人遇到过这种情况吗?如有任何意见,将不胜感激,谢谢

域可能配置为不允许普通身份验证。我不知道是否有必要将MS的身份验证应用于Pop3,或者他们是否有您可以生成的特定于应用程序的密码的概念。您可以配置Thunderbird以访问outlook.com邮箱吗?此外,报告可能会提供更多有关其失败原因的信息。您可能需要将属性设置为true以获得完整的身份验证交换,但不要在此处发布该输出,因为它将包含您的密码。