一尘不染

Tomcat中JNDI的Java Mail API配置文档

tomcat

我花了几天时间弄清楚如何通过 具有身份验证的 JNDI在Tomcat中配置javax.mail.Session ,现在我可以了,但要深入研究代码。

在这段时间里,我看到了有史以来最糟糕的代码:javax.mail.Service#connect(String,String,String,String)版本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”。

至少魔术是在Tomcat中完成的org.apache.naming.factory.MailSessionFactoryjavax.mail.Authenticator如果属性password和属性存在mail.smtp.usermail.user退出,则该工厂向邮件会话添加。

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

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


阅读 303

收藏
2020-06-16

共1个答案

一尘不染

Tomcat文档受到限制,但是源代码在这里:[http](http://javasourcecode.org/html/open-
source/tomcat/tomcat-7.0.19/org/apache/naming/factory/MailSessionFactory.java.html)
//javasourcecode.org/html/open-
source/tomcat/tomcat-7.0.19/org/apache/naming/factory/MailSessionFactory.java.html
2020-06-16