POP3Store无法进行身份验证,仅在Tomcat7中进行身份验证(在单元测试中正常工作)

时间:2012-02-08 08:35:55

标签: java javamail tomcat7

此代码在单元测试中完美运行(连接到Gmail):

Properties props = new Properties();
props.put("mail.pop3.ssl.enable", true);
props.put("mail.pop3.host", "pop.gmail.com");
props.put("mail.pop3.port", "995");
javax.mail.Session.getDefaultInstance(props, null)
  .getStore("pop3")
  .connect("foo@...", "password");

当我在Tomcat7中运行相同的代码时:

...
Caused by: javax.mail.AuthenticationFailedException: failed to connect
  at javax.mail.Service.connect(Service.java:332)
  at javax.mail.Service.connect(Service.java:176)
  at javax.mail.Service.connect(Service.java:196)

它是什么?

好吧,我已经配置了META-INF/javamail.providers

protocol=pop3; type=store; class=com.sun.mail.pop3.POP3Store;

我在WEB-INF/libjavax.mail:mail:1.4.4com.sun.mail:pop3:1.4.4中拥有这些Maven依赖项。

2 个答案:

答案 0 :(得分:1)

它无法进行身份验证,无法连接。 JavaMail FAQ有tips for debugging connection problems。另请注意:

  • 您不需要触摸javamail.providers文件
  • POP3提供程序包含在javax.mail:mail工件中,因此您不需要单独的依赖项
  • 您不需要设置mail.pop3.port,因为它是默认的SSL端口
  • 您应该使用Session.getInstance而不是Session.getDefaultInstance

答案 1 :(得分:0)

这是它的工作原理:

Properties props = new Properties();
props.put("mail.pop3.ssl.enable", true);
javax.mail.Session.getDefaultInstance(props)
  .getStore("pop3s")
  .connect("pop.gmail.com", 995, "foo@...", "password");

我不知道为什么,但在这种组合中,它既适用于单元测试,也适用于Tomcat7容器。