Falha na autenticação usando JNDI e JavaMail com SMTP auth

2 respostas
D

Olá pessoal,
Estou tendo problemas ao tentar enviar um e-mail utilizando um recurso
atribuido no JNDI...

No server.xml eu tenho:

<Resource name="mail/SMTP-Email"
  auth="Container"
  scope="Shareable"
  type="javax.mail.Session" />

    <ResourceParams name="mail/SMTP-Email">
      <parameter>
        <name>mail.smtp.host</name>
        <value>localhost</value>
      </parameter>
      <parameter>
        <name>mail.smtp.auth</name>
        <value>true</value>
      </parameter>
      <parameter>
        <name>mail.smtp.user</name>
        <value>usuarioteste</value>
      </parameter>
      <parameter>
        <name>mail.smtp.password</name>
        <value>senhateste</value>
      </parameter>			   
  </ResourceParams>
E na classe de envio de e-mails eu tenho:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session sessao_email = (Session) envCtx.lookup("mail/SMTP-Email");
Porém qdo executo essa classe o seguinte erro é exibido:

javax.servlet.ServletException: javax/mail/Authenticator

Alguém já passou por algo parecido ou sabe com resolver esse problema?

2 Respostas

A

Cara,
sabe essa parte aqui do seu codigo:

<parameter> 
        <name>mail.smtp.host</name> 
        <value>localhost</value> 
      </parameter>

Ta certo mesmo??
Não precisa informar nenhuma porta não???
Responde aê, mesmo se não tiver nada haver!!!

D

Pensei tb q pudesse ser isso...
Aí adicionei esse:

<parameter> 
        <name>mail.smtp.port</name> 
        <value>25</value> 
      </parameter>

E mesmo assim não tava dando pra autenticar...

Então eu fiz o seguinte, em vez d chamar a sessão direto assim:

Session sessao_email = (Session) envCtx.lookup("mail/SMTP-Email");

Eu chamo um método..

Session sessao_email = this.getSessaoEmail();

E nesse método:

Context contexto_inicial = new InitialContext();
Context contexto_env = (Context) contexto_inicial.lookup("java:comp/env");
sessao_email = (Session) contexto_env.lookup("mail/SMTP-Email");
Properties novas_propriedades = new Properties();
novas_propriedades.setProperty("mail.smtp.host", sessao_email.getProperty("mail.smtp.host"));
novas_propriedades.setProperty("mail.smtp.user", sessao_email.getProperty("mail.smtp.user"));
novas_propriedades.setProperty("mail.smtp.password", sessao_email.getProperty("mail.smtp.password"));
novas_propriedades.setProperty("mail.smtp.auth", sessao_email.getProperty("mail.smtp.auth"));

Autenticador autenticador = new Autenticador(
  sessao_email.getProperty("mail.smtp.user"),
  sessao_email.getProperty("mail.smtp.password")
);
            
sessao_email = Session.getDefaultInstance(novas_propriedades, autenticador);

Onde o Autenticador é uma sub classe q herda javax.mail.Authenticator...

Aí está autenticando...
Mas teoricamente o container não deveria autenticar sem precisar fazer isso?

Criado 25 de julho de 2005
Ultima resposta 26 de jul. de 2005
Respostas 2
Participantes 2