2011-06-16 61 views
8

我花了几天的时间来弄清楚如何通过JNDI 在Tomcat中配置javax.mail.Session,身份验证为,现在我明白了,但只有在深入了解码。Tomcat中JNDI的Java Mail API配置文档

在这个时候,我已经看到了有史以来最糟糕的代码:javax.mail.Service#连接(字符串,字符串,字符串,字符串)版本1.4.1

if (user == null) { 
    user = url.getUsername(); 
    if (password == null) // get password too if we need it 
     password = url.getPassword(); 
    } else { 
    if (password == null && user.equals(url.getUsername())) 
     // only get the password if it matches the username 
     password = url.getPassword(); 
    } 

是密码分配当?为什么它会针对null检查两次? - 然后意识到其他不属于如果以上。 (这是原始缩进)。返回主题。

至少我发现正确的资源定义是:

<Resource name="email/session" 
    type="javax.mail.Session" 
    auth="Container" 
    password="secret" 

    mail.debug="false" 
    mail.transport.protocol="smtp" 

    mail.smtp.auth="true" 
    mail.smtp.user="testi" 
    mail.smtp.host="smtp.xxx.org" 
    mail.smtp.from="[email protected]"  
    /> 

注重事实,即它是“密码”和“mail.smtp.user”或“mail.user”,而不是“mail.smtp.password”或“user”。

至少魔法是在雄猫org.apache.naming.factory.MailSessionFactory完成。如果退出属性password和属性mail.smtp.usermail.user,此工厂将在邮件会话中添加javax.mail.Authenticator

现在我的问题是所有这些东西的文档在哪里。特别是关于用户名和密码的配置?

顺便说一句:我解释了一点更详细,以帮助其他如何有同样的问题。

+2

2012年8月发布的一个问题在https://issues.apache.org/bugzilla/show_bug.cgi?id=53665 – 2012-10-15 00:29:48

+0

我想说最后的'else'应该被删除。大多数情况下,这是由于长时间的代码演变。 – EJP 2012-10-15 09:30:40

回答

0
+0

是的,我知道。我的问题我已经指出了魔法所在的类。 - 但由于第一部分(“Tomcat文档是有限的”),我会接受答案 - 它是唯一正确的答案。 – Ralph 2012-01-10 14:06:54

+0

仅供参考Tomcat文档已更新。更改将在7.0.42以后:http://svn.apache.org/r1495016 – 2013-06-20 14:28:11