Email JSP erro java.lang.NoClassDefFoundError: javax/mail/Authenticator

8 respostas
C

Boa noite,
Estou fazendo um programa em JSP que usa servlet que deveria enviar um email automatico para emails recebidos via uma pagina jsp
Ja inclui as jars activation.jar mail.jar e servlet.jar
Mas o seguinte erro aparece

exception 

javax.servlet.ServletException: Error instantiating servlet class fiap.Email
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Unknown Source)


root cause 

java.lang.NoClassDefFoundError: javax/mail/Authenticator
	java.lang.Class.getDeclaredConstructors0(Native Method)
	java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	java.lang.Class.getConstructor0(Unknown Source)
	java.lang.Class.newInstance0(Unknown Source)
	java.lang.Class.newInstance(Unknown Source)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Unknown Source)


root cause 

java.lang.ClassNotFoundException: javax.mail.Authenticator
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1362)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1208)
	java.lang.ClassLoader.loadClassInternal(Unknown Source)
	java.lang.Class.getDeclaredConstructors0(Native Method)
	java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	java.lang.Class.getConstructor0(Unknown Source)
	java.lang.Class.newInstance0(Unknown Source)
	java.lang.Class.newInstance(Unknown Source)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	java.lang.Thread.run(Unknown Source)

Alguem tem ideia de como resolver isso?

Caso seja util segue o codigo usado no servlet

package chucknorris;

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.Authenticator;   
import javax.mail.PasswordAuthentication; 
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Email extends HttpServlet{
	String para;
	public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	throws ServletException, IOException {
		para = request.getParameter("Email");
		Email e = new Email();
		e.Email(de, para, assunto, mensagem);
		}
	
		private String mailSMTPServer= "smtp.gmail.com";
		private String mailSMTPServerPort ="465";
		
		
		public void Email(String de,String para, String assunto, String mensagem){
			Properties p = new Properties();
			
			//Parametros do email
			de = "remetende";
			para = "destinatario";
			assunto = "Teste de Email automatico!";
			mensagem = "Teste teste teste";
			
			//inicio de configuracao de proxy, so necessario se proxy
			//p.setProperty("proxySet", "true");
			//p.setProperty("socksProxyHost", "DIGITAR IP DE SERVIDOR PROXY");
			//p.setProperty("socksProxyPort", "DIGITAR PORTA DO PROXY");
			
			p.put("mail.transport.protocol", "smtp");
			p.put("mail.smtp.starttls.enable", "true");
			p.put("mail.smtp.host", mailSMTPServer);
			p.put("mail.smtp.auth", "true");
			p.put("mail.user.user", de);
			p.put("mail.debug", "true");
			p.put("mail.smtp.port", mailSMTPServerPort);
			p.put("mail.smtp.socketFactory.port", mailSMTPServerPort);
			p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
			p.put("mail.smtp.socketFactory.fallback", "false");
			
			SimpleAuth auth = null;    
			auth = new SimpleAuth ("conta a ser usada", "senha");
			
			Session session = Session.getDefaultInstance(p, auth);
			session.setDebug(true); 
			
			Message msg = new MimeMessage(session);
			
			try{
				msg.setRecipient(Message.RecipientType.TO, new InternetAddress(para));
				msg.setFrom(new InternetAddress(de));
				msg.setSubject(assunto);
				msg.setContent(mensagem,"text/plain");				
			}
			catch(Exception e){
				System.out.println(e.getMessage());   
			}
			
			Transport t;
			try{
				t = session.getTransport("smtp"); 
				t.connect(mailSMTPServer, "remetende", "senha");
				msg.saveChanges();
				t.sendMessage(msg, msg.getAllRecipients());   
	            t.close();   
			}
			catch(Exception e){
				System.out.println(e.getMessage());
			}			
		}
}

8 Respostas

M

Salve

Não tenho o domínio da api de email da Sun, sempre usei o pacote mail do projeto Apache Commons, se quiseres tentar: http://commons.apache.org/email

C

Opa Obrigado pela sugestão!!!
Vc teria um codigo para exemplificar como essa pacote funciona?
Abraço

M

Primeiro tens que baixar aqui: http://commons.apache.org/downloads/download_email.cgi e adicionar o jar commons-email. Como o commonse-mail é uma api simplificada do sun javamail também tens que manter o jar do sun javamail, além de claro, estiveres usando Java 1.5, o pacote Activation.

Aqui está um exemplo simples:

SimpleEmail email = new SimpleEmail();
email.setHostName("localhost"); //aqui vai o provedor smtp
email.addTo("[email removido]");
email.setFrom("[email removido]");
email.setSubject("Qualquer assunto");
email.setMsg("Mensagem qualquer");
email.send();

Para alterar a porta do smtp use: email.setSmtpPort(int port)

Pessoalmente acho o Commons E-mail ótimo para “matar mosquitos”, o que tenho feito normalmente, mas talvez para algo mais especializado, complexo, pode ser necessário usar o JavaMail.

I

Cara,

Está faltando um jar ai na sua brincadeira… Olha o log:

java.lang.ClassNotFoundException: javax.mail.Authenticator

Olha essa URL:

http://www.java2s.com/Code/Jar/glassfish/Downloadmailapijar.htm

P

Olá amigos, re-aproveitando o tópico, estou enfrentando o mesmo erro que o amigo Chuck.

Quando compilo o projeto pela IDE ele funciona normalmente, porém quando tento executar a partir do arquivo JAR gerado, me deparo com este erro.

Alguém poderia me dar alguma dica de como solucionar este problema?

Obrigado.

V

Voce sabe que o jar tem que estar na lib nao apenas refenciado por que se nao dá este erro mesmo?

P

Sim amigo, a jar está na lib, e o classpath está devidamente configurado.

P

Olá amigo, consegui resolver o problema, os arquivos jar estavam na pasta lib do jdk1.6.0_14, porém o programa só funcionou quando os copiei para lib/ext da minha pasta jre6.

Obrigado.

Criado 8 de novembro de 2008
Ultima resposta 25 de ago. de 2009
Respostas 8
Participantes 5