Erro no envio de formulário via email

5 respostas
A

Boa noite galera!

Estou desenvolvendo um site e apanhando para enviar dados de um formulário por email com JSP.

Pesquisei em alguns tópicos do fórum, mas continuo com dúvida. Estou meio perdido (completamente rsrs).

No momento em que o botão "enviar" é clicado, ocorre o seguinte erro:

java.lang.NoClassDefFoundError: javax.mail/Authenticator

*Eu baixei a versão 1.4.5 do JavaMail API

Segue minhas classes:

Enviar.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
 	<%@ page import="send.Send" %>
 	<%@ page import="send.SendEmail" %>
 	<%@ page import="send.*" %>
 	<%@ page import="javax.mail.*" %>
	<%@ page import="javax.mail.internet.*" %>
 	
 	<jsp:useBean id="send" scope="session" class="send.Send" />
 	<jsp:useBean id="sendEmail" scope="session" class="send.SendEmail" />
 	
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Envia Email</title>
</head>
<body>
	
	<%
		try{
			String nome = request.getParameter("nome");
			String email = request.getParameter("email");
			String assunto = request.getParameter("assunto");
			String mensagem = request.getParameter("mensagem");
			
			SendEmail enviar = new SendEmail();
			enviar.sendEmail(nome, email, assunto, mensagem);
			
		%>
			<p>Enviado com Sucesso!</p>
		<%	
			
		} catch(AddressException e){ %>
			<p>Endereço de e-mail inválido!</p>
		<%}
		
		catch(MessagingException e){ %>
			<p>Impossível enviar o e-mail!</p>
		<%} %>
		
	
</body>
</html>

Código do tópico - http://www.guj.com.br/java/87637-api-java-mail---usando-o-gmaill

SendEmail.java
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.mail.Authenticator;  
import javax.mail.PasswordAuthentication;   
  
public class SendMail {  
      
    private String mailSMTPServer;  
    private String mailSMTPServerPort;  
      
    
    SendMail() {   
        mailSMTPServer = "smtp.gmail.com";  
        mailSMTPServerPort = "465";  
    }  
   
    SendMail(String mailSMTPServer, String mailSMTPServerPort) {   
        this.mailSMTPServer = mailSMTPServer;  
        this.mailSMTPServerPort = mailSMTPServerPort;  
    }  
      
    public void sendMail(String from, String to, String subject, String message) {  
          
        Properties props = new Properties();    
  
        props.put("mail.transport.protocol", "smtp");  
        props.put("mail.smtp.starttls.enable","true");   
        props.put("mail.smtp.host", mailSMTPServer); 
        props.put("mail.smtp.auth", "true");   
        props.put("mail.smtp.user", from);   
        props.put("mail.debug", "true");  
        props.put("mail.smtp.port", mailSMTPServerPort);   
        props.put("mail.smtp.socketFactory.port", mailSMTPServerPort);   
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
        props.put("mail.smtp.socketFactory.fallback", "false");  
            
        SimpleAuth auth = null;  
        auth = new SimpleAuth ("seuusuarioparalogin","suasenhaparalogin");  
          
        Session session = Session.getDefaultInstance(props, auth);  
        session.setDebug(true);   
  
        
        Message msg = new MimeMessage(session);  
  
        try {  
       
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));          
            msg.setFrom(new InternetAddress(from));             
            msg.setSubject(subject);      
            msg.setContent(message,"text/plain");  
  
        } catch (Exception e) {  
            System.out.println(">> Erro: Completar Mensagem");  
            e.printStackTrace();  
        }  
          
       
        Transport tr;  
        try {  
            tr = session.getTransport("smtp"); 
           
            tr.connect(mailSMTPServer, "seuusuarioparalogin", "suasenhaparalogin");  
            msg.saveChanges(); 
            tr.sendMessage(msg, msg.getAllRecipients());  
            tr.close();  
        } catch (Exception e) {  
            System.out.println(">> Erro: Envio Mensagem");  
            e.printStackTrace();  
        }  
  
    }  
}
SimpleAuth.java
class SimpleAuth extends Authenticator {  
    public String username = null;  
    public String password = null;  
  
  
    public SimpleAuth(String user, String pwd) {  
        username = user;  
        password = pwd;  
    }  
  
    protected PasswordAuthentication getPasswordAuthentication() {  
        return new PasswordAuthentication (username,password);  
    }  
}

Obrigado.

5 Respostas

A

Se alguém tiver uma outra maneira de fazer envio com JSP, um caminho sei lá… :wink:

Grato.

natanaelv

Este erro ocorre quando a classe procurada nao está no Classpath da aplicação.
Você colocou os jar da JavaMail Api no diretório lib?

Adicione os jars do JavaMail ao diretório WEB-INF/lib do seu projeto.

A

natanaelv:
Este erro ocorre quando a classe procurada nao está no Classpath da aplicação.
Você colocou os jar da JavaMail Api no diretório lib?

Adicione os jars do JavaMail ao diretório WEB-INF/lib do seu projeto.

Olá.

Sim adicionei.

natanaelv

Adicione os jars: mail.jar e activation.jar no WEB-INF/lib.

Se estiver usando o Maven adicione isso ao pom.xml

&lt;dependency&gt;
        &lt;groupId&gt;javax.mail&lt;/groupId&gt;
        &lt;artifactId&gt;mail&lt;/artifactId&gt;
        &lt;version&gt;1.4.5&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;javax.activation&lt;/groupId&gt;
        &lt;artifactId&gt;activation&lt;/artifactId&gt;
        &lt;version&gt;1.1.1&lt;/version&gt;
    &lt;/dependency&gt;
drsmachado

Camarada, alguns detalhes.
1 - Embora seja possível fazer com que código java funcione em um jsp, isso não é recomendado. Prefira utilizar uma Servlet para isso.
2 - A mensagem é bem clara, o erro é quanto À disponibilidade do jar referente à autenticação no classpath. Se está usando o Tomcat, deve colocar o jar mail.jar dentro da pasta WEB-INF/lib.

Estou enviando um projeto anexo, não consegui testar, pois o proxy bloqueia requisição ao Gmail.
De qualquer forma, isto deve funcionar, talvez com algumas alterações.

Criado 20 de agosto de 2012
Ultima resposta 22 de ago. de 2012
Respostas 5
Participantes 3