Documentação da configuração da API Java Mail para JNDI no Tomcat
-
28-10-2019 - |
Pergunta
Passei vários dias tentando descobrir como configurar uma javax.mail.Session no Tomcat via JNDI com autenticação , agora eu entendo, mas somente depois de um mergulho profundo no código.
Nesse período, eu vi o pior código de todos: javax.mail.Service # connect (String, String, String, String) Versão 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();
}
Quando a senha é atribuída? e por que é verificado em relação a null duas vezes? - e então perceber que o else não pertence ao if acima. (Este é o recuo original). Voltar ao tópico.
Pelo menos descobri que a definição de recurso correta é:
<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"
/>
Preste atenção ao fato de que é "senha" e "mail.smtp.user" ou "mail.user", mas não "mail.smtp.password" ou "usuário".
Pelo menos a mágica é feita no org.apache.naming.factory.MailSessionFactory
do Tomcats. Esta fábrica adiciona um javax.mail.Authenticator
à sessão de correio se uma propriedade password
e uma propriedade mail.smtp.user
ou mail.user
sair.
Agora minha pergunta é onde está a documentação de tudo isso. Especialmente sobre configuração de nome de usuário e senha?
A propósito: expliquei um pouco mais detalhadamente para ajudar outros como tem o mesmo problema.
Solução
A documentação do Tomcat é limitada, mas o código-fonte está aqui: http://javasourcecode.org/html/open-source/tomcat/tomcat-7.0.19/org/apache/naming/factory/MailSessionFactory.java.html
Outras dicas
Este é simplesmente um bug na documentação.Alguém já levantou isso no rastreador de bugs do Tomcat
https://bz.apache.org/bugzilla/show_bug.cgi? id= 53665
Eu sugiro que você se registre e vote no bug.