在我的XPage应用程序中,我使用javax.mail
库来读取来自IMAP帐户的邮件。如果我在Java代理中使用它,我用来获取和保存消息的类就可以正常工作。但是,如果我在XPage项目中将完全相同的类放入“Code / Java”中,那么当我尝试获取会话存储时,方法会抛出javax.mail.NoSuchProviderException: No provider for imaps
:
Properties props = new Properties();
props.setProperty("mail.imaps.socketFactory.class", "AlwaysTrustSSLContextFactory");
props.setProperty("mail.imaps.socketFactory.port", "993");
props.setProperty("mail.imap.ssl.enable", "true");
props.setProperty("mail.imaps.ssl.trust", "*");
URLName url = new URLName("imaps", server, 993, "", username, password);
Session session = Session.getInstance(props, null);
Store store = session.getStore(url); //THE ERROR OCCURS HERE
store.connect();
我添加到项目构建路径的javax.mail
库与我在Java代理中使用的库完全相同。
我发现上述类型的异常的一些帖子表明它可能是由构建路径中包含的javax.mail
的多个版本引起的。但是,似乎并非如此,因为从构建路径中删除javax.mail
会导致无法构建类。
有人知道这里有什么问题吗?
答案 0 :(得分:2)
请检查所使用的 javax.mail 的版本和提供程序。您可以通过添加
来完成此操作props.setProperty("mail.debug", "true" );
到你的房产。
在控制台上(客户端的Java控制台或服务器控制台,您可以看到结果,如下所示:
DEBUG: JavaMail version 1.4ea
和
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc]
另外,您可以通过编程方式获取可用提供程序列表(当您没有控制台访问权限时):
Session session = Session.getInstance(props, null);
Provider[] providers = session.getProviders();
for( Provider p:providers ){
if( ! ("".equals(tmpStr)) )
tmpStr = tmpStr + ",";
tmpStr = tmpStr + p.getProtocol();
}
[您将看到提供商列表中不包含服务器上的 imaps (8.5.3)]
答案 1 :(得分:1)
要发表评论,但代表还不够高......
java代理是否在同一个db中?
如果是的话,当代理人不在时,你可以剪掉它并尝试xpage吗?可能是一个长镜头,但可能值得检查代理人不会以任何方式干涉。
答案 2 :(得分:1)
您希望使用代码示例查看my article如何从Notes中读取IMAP。我没有将代码作为代理运行,而是从命令行运行。机会是,它会更好地为您服务。主要区别(可能?):我使用了Google enhanced IMAP classes。
检查一下,告诉我们这是否对您有用!