如何使用Java应用程序中的IMAPS协议连接到office365

问题描述:

这里有几篇文章,但其中没有一篇适合我。基本上我有以下java代码连接到办公室365:如何使用Java应用程序中的IMAPS协议连接到office365

Properties props = new Properties(); 
    props.put("mail.imaps.auth.plain.disable", "true"); 
    props.put("mail.imaps.ssl.enable", "true"); 

    session = Session.getInstance(props, null); 
    store = session.getStore("imaps"); 
    store.connect("outlook.office365.com", 993, "[email protected]", "psw"); 

但它失败,LOGIN失败的错误;

javax.mail.AuthenticationFailedException: LOGIN failed. 
     at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:725) 
     at javax.mail.Service.connect(Service.java:366) 

此外,我可以使用Thunderbird的IMAPS登录我的帐户。

任何解决问题的指针,将不胜感激!

此代码适用于Outlook,我已将其修改为与Office365一起使用。我做了研究,以找到办公室365的IMAP主机。我希望它可以帮助你。

public static void main(String[] args) throws MessagingException { 
    MultiPartEmail email = new MultiPartEmail(); 
    Properties props = new Properties(); 
    props.setProperty("mail.store.protocol", "imaps"); 

    //extra codes required for reading OUTLOOK mails during IMAP-start 
    props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.setProperty("mail.imaps.socketFactory.fallback", "false"); 
    props.setProperty("mail.imaps.port", "993"); 
    props.setProperty("mail.imaps.socketFactory.port", "993"); 
    //extra codes required for reading OUTLOOK mails during IMAP-end 

    Session session = Session.getDefaultInstance(props, null); 
    Store store = session.getStore("imaps"); 
    store.connect("outlook.office365.com", "[email protected]", "mypassword"); 
    Folder inbox = store.getFolder("INBOX"); 
    inbox.open(Folder.READ_WRITE); 


    inbox.addMessageCountListener(new MessageCountListener() { 
     @Override 
     public void messagesAdded(MessageCountEvent messageCountEvent) { 
      Message[] messages = messageCountEvent.getMessages(); 
      System.out.println("A message was added, you now have: " + messages.length + " emails"); 
     } 

     @Override 
     public void messagesRemoved(MessageCountEvent messageCountEvent) { 

     } 

    }); 

    while (true) { 
     try { 
      Thread.sleep(1500); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     inbox.getMessageCount(); // Keeps connection alive 
    } 

} 
+0

哎呀,你已经有了域:d –

+0

谢谢回答,但这没有帮助。连接被拒绝,同一个LOGIN失败的异常。还确保我们的Office 365服务器上启用了IMAPS访问协议。 – Delorean

事实证明,Office 365拒绝连接是因为密码中不支持的字符。特别是引用字符。所以,像改变psw一样简单,解决了我的问题。

而下面的代码工作得很好:

Properties props = new Properties(); 
    props.put("mail.store.protocol", "imaps"); 

    session = Session.getInstance(props, null); 
    store = session.getStore(); 
    store.connect("outlook.office365.com", 993, "[email protected]", "psw"); 

随着 'javax.mail' 版本: '1.5.6'

+0

错误消息有时可能会更有帮助... – Delorean