【问题标题】:Documentation of Java Mail API configuration for JNDI in TomcatTomcat 中 JNDI 的 Java Mail API 配置文档
【发布时间】:2011-09-16 08:41:20
【问题描述】:

我花了几天时间弄清楚如何通过 JNDIwith authentication 在 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 进行两次检查? – 然后意识到 else 不属于上面的 if。 (这是原始缩进)。回到主题。

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

<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”。

至少魔法是在 Tomcats org.apache.naming.factory.MailSessionFactory 中完成的。如果属性 password 和属性 mail.smtp.user 或 mail.user 退出,则该工厂将 javax.mail.Authenticator 添加到邮件会话。

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

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

【问题讨论】:

标签: java tomcat jndi jakarta-mail


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

    • 是的,我知道。我的问题是,我已经指出了魔术的作用。 -- 但我会接受答案,因为第一部分(“Tomcat 文档有限”) -- 它似乎是唯一正确的答案。
    • 仅供参考,Tomcat 文档已更新。更改将从 7.0.42 开始:svn.apache.org/r1495016
    猜你喜欢
    • 2013-06-10
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多