我花了几天的时间来弄清楚如何通过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.user
或mail.user
,此工厂将在邮件会话中添加javax.mail.Authenticator
。
现在我的问题是所有这些东西的文档在哪里。特别是关于用户名和密码的配置?
顺便说一句:我解释了一点更详细,以帮助其他如何有同样的问题。
2012年8月发布的一个问题在https://issues.apache.org/bugzilla/show_bug.cgi?id=53665 – 2012-10-15 00:29:48
我想说最后的'else'应该被删除。大多数情况下,这是由于长时间的代码演变。 – EJP 2012-10-15 09:30:40