Tomcat中JNDI的Java Mail API配置文档

时间:2011-06-16 12:54:09

标签: java tomcat jndi javax.mail

我花了几天的时间来弄清楚如何通过JNDI 验证在Tomcat中配置javax.mail.Session,现在我只是在深入研究代码之后才知道它。

在这段时间里,我见过有史以来最糟糕的代码:javax.mail.Service #connect(String,String,String,String)Version 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="test@example.com"       
    />

请注意它是“password”和“mail.smtp.user”或“mail.user”而不是“mail.smtp.password”或“user”。

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

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

顺便说一句:我解释得更详细一些,以帮助其他人如何解决同样的问题。

2 个答案:

答案 0 :(得分:2)

这只是文档中的一个错误。有人已经在Tomcat错误跟踪器上提出了这个问题

https://bz.apache.org/bugzilla/show_bug.cgi?id=53665

我建议您注册并投票支持该错误。

答案 1 :(得分:0)