同样的代码,直接读取邮箱没有问题的,但是尝试读取共享的邮箱就报错了:
DEBUG IMAP: AUTHENTICATE PLAIN command trace suppressed
DEBUG IMAP: AUTHENTICATE PLAIN command result: A1 NO AUTHENTICATE failed.
Exception in thread "main" javax.mail.AuthenticationFailedException: AUTHENTICATE failed.
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:725)
at javax.mail.Service.connect(Service.java:366)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:267)
at IMAP_Test.main(IMAP_Test.java:71)
解决的办法也很奇怪:
Properties props = System.getProperties();
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.imaps.auth.plain.disable", "true");
props.setProperty("mail.imap.auth.plain.disable", "true");//must set this one to login share mail box
props.setProperty("mail.imap.ssl.enable","true");
props.setProperty("mail.imaps.auth.gssapi.disable", "true");
props.setProperty("mail.imaps.auth.ntlm.disable", "true");
props.setProperty("mail.imap.socketFactory.fallback", "false");
props.setProperty("mail.store.protocol", "imap");
props.setProperty("mail.imap.host", "outlook.office365.com");
props.setProperty("mail.imap.port", "993");
props.setProperty("mail.imap.socketFactory.port", "993");
// 创建Session实例对象
Session session = Session.getInstance(props);
session.setDebug(true);
// 创建IMAP协议的Store对象
Store store = session.getStore("imap");
// 连接邮件服务器
store.connect("hsv-request-st1@bib.com\\pre-assessment.st1@bib.com", "xxxxxxxxx");
<end>