Envio de email com servlet

eae,

Eu preciso colocar, no site que estou fazendo, um lugar para o usuário me mandar um email…igual alguns sites tem por ae…aquele negocio que poe o email do usuario , a menssagem dele e depois clica em enviar…preciso que essa mensagem chegue ateh o meu email

eu jah fiz minha classe para enviar o email…:

[code]import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.mail.;
import javax.mail.internet.
;
import java.util.Properties;

public class email extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{

    String msg = request.getParameter("msg");

    enviaEmail ( "usuario@hotmail.com", "eu@yahoo.com.br", "teste", "msg");

}

public static void enviaEmail (String remetente, String receptor, String assunto, String mensagem )
{
Properties p = new Properties();
p.put(“mail.host”, “smtp2.yahoo.com.br”);
Session session = Session.getInstance(p, null);
MimeMessage msg = new MimeMessage(session);

         try
        {
                
                msg.setFrom(new InternetAddress(remetente));
                msg.setRecipient(Message.RecipientType.TO, new InternetAddress(receptor));

           
                msg.setSentDate(new Date());

                msg.setSubject(assunto);

                msg.setText(mensagem);
             
                Transport.send(msg);

                
        }
          catch (AddressException e)
        {
                
        }
          catch (MessagingException e)
        {
                  // erro nesse exception...
        }

}

}[/code]

a sintaxe tah beleza…mas ele não consegue enviar o email…da erro de exessão no MessagingException…Eu li os topicos sobre enviar email, mas mesmo assim e não estou entendendo…

porfavor me ajudem ae…

flw

Achei esse código há muito tempo atrás, para o que eu precisava funcionou bem.

package enviaemail;

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 SendEmail{  
       
     private String mailSMTPServer;  
     private String mailSMTPServerPort;  
       
     /* 
      * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL  
      * e a porta usada por ele 
      */  
     public SendEmail() { //Para o GMAIL   
         mailSMTPServer = "smtp.gmail.com";  
         mailSMTPServerPort = "465";  
     }  
     /* 
      * caso queira mudar o servidor e a porta, so enviar para o contrutor 
      * os valor como string 
      */  
     public SendEmail(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor  
         this.mailSMTPServer = mailSMTPServer;  
         this.mailSMTPServerPort = mailSMTPServerPort;  
     }  
       
     public void Mail(String from, String to, String subject, String message, String login, String senha) {  
           
         Properties props = new Properties();  
   
         props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP  
         props.put("mail.smtp.starttls.enable","true");   
         props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL  
         props.put("mail.smtp.auth", "true"); //ativa autenticacao  
         props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)  
         props.put("mail.debug", "true");  
         props.put("mail.smtp.port", mailSMTPServerPort); //porta  
         props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket  
         props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
         props.put("mail.smtp.socketFactory.fallback", "false");  
           
         //Cria um autenticador que sera usado a seguir  
         SimpleAuth auth = null;  
         auth = new SimpleAuth (login, senha);  
           
         //Session - objeto que ira realizar a conexão com o servidor  
         /*Como há necessidade de autenticação é criada uma autenticacao que 
          * é responsavel por solicitar e retornar o usuário e senha para  
          * autenticação */ 
         
         Session session = Session.getDefaultInstance(props, auth);  
         session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email  
   
         //Objeto que contém a mensagem  
         Message msg = new MimeMessage(session);  
   
         try {  
             //Setando o destinatário  
             msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));  
             //Setando a origem do email  
             msg.setFrom(new InternetAddress(from));  
             //Setando o assunto  
             msg.setSubject(subject);  
             //Setando o conteúdo/corpo do email  
             msg.setContent(message,"text/plain");  
   
         } catch (Exception e) {  
             System.out.println(">> Erro: Completar Mensagem");  
             e.printStackTrace();  
         }  
           
         //Objeto encarregado de enviar os dados para o email  
         Transport tr;  
         try {  
             tr = session.getTransport("smtp"); //define smtp para transporte  
             /* 
              *  1 - define o servidor smtp 
              *  2 - seu nome de usuario do gmail 
              *  3 - sua senha do gmail 
              */  
             tr.connect(mailSMTPServer, login, senha);  
             msg.saveChanges(); // don't forget this  
             //envio da mensagem  
             tr.sendMessage(msg, msg.getAllRecipients());  
             tr.close();  
         } catch (Exception e) {  
             // TODO Auto-generated catch block  
             System.out.println(">> Erro: Envio Mensagem");  
             e.printStackTrace();  
         }  
     }  
 
 public class SimpleAuth extends Authenticator {  
     public String username = null;  
     public String password = null;  
   
   
     public SimpleAuth(String user, String pwd) {  
         username = user;  
         password = pwd;  
     }  
 
     public PasswordAuthentication getPasswordAuthentication() {  
         return new PasswordAuthentication(this.username, this.password);  
     }  
    }//fim da classe SimpleAuth
}//fim da classe principal

ow vlw pela ajuda kra…mas ainda não consegui…pelo que eu vi o usuario precisaria passar o login e a senha para me mandar a mensagem…isso n seria legal e pratico…entao eu resolvi colocar o meu email enviando mensagem para ele mesmo…mas o meu email é do yahoo e eu não sei direito qual é a porta utilizada pelo yahoo…dei uma pesquisada e achei uma porta 587…tentei assim mas não deu certo…

// FAZENDO CHAMADA DA classe sendEmail SendEmail email = new SendEmail(); String status = email.Mail("eu@yahoo.com.br", "eu@yahoo.com.br", "teste email", "deu certo", "eu@yahoo.com.br", "123");

[code] 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 SendEmail{

  private String mailSMTPServer;
  private String mailSMTPServerPort;

  /*

* quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL

* e a porta usada por ele

*/

  public SendEmail() { //Para o yahoo
      mailSMTPServer = "smtp.yahoo.com.br";
      mailSMTPServerPort = "587";
  }
  /*

* caso queira mudar o servidor e a porta, so enviar para o contrutor

* os valor como string

*/

  public SendEmail(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor
      this.mailSMTPServer = mailSMTPServer;
      this.mailSMTPServerPort = mailSMTPServerPort;
  }

  public String Mail(String from, String to, String subject, String message, String login, String senha) {

      Properties props = new Properties();

      props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP
      props.put("mail.smtp.starttls.enable","true");
      props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL
      props.put("mail.smtp.auth", "true"); //ativa autenticacao
      props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)
      props.put("mail.debug", "true");
      props.put("mail.smtp.port", mailSMTPServerPort); //porta
      props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket
      props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      props.put("mail.smtp.socketFactory.fallback", "false");

      //Cria um autenticador que sera usado a seguir
      SimpleAuth auth = null;
      auth = new SimpleAuth (login, senha);

      //Session - objeto que ira realizar a conexão com o servidor
      /*Como há necessidade de autenticação é criada uma autenticacao que

* é responsavel por solicitar e retornar o usuário e senha para

* autenticação */

      Session session = Session.getDefaultInstance(props, auth);
      session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email

      //Objeto que contém a mensagem
      Message msg = new MimeMessage(session);

      try {
          //Setando o destinatário
          msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
          //Setando a origem do email
          msg.setFrom(new InternetAddress(from));
          //Setando o assunto
          msg.setSubject(subject);
          //Setando o conteúdo/corpo do email
          msg.setContent(message,"text/plain");

     } catch (Exception e) {
          return ("erro ao completar mensagem!");
      }

      //Objeto encarregado de enviar os dados para o email
      Transport tr;
      try {
          tr = session.getTransport("smtp"); //define smtp para transporte
          /*

* 1 - define o servidor smtp

* 2 - seu nome de usuario do gmail

* 3 - sua senha do gmail

*/

          tr.connect(mailSMTPServer, login, senha);
          msg.saveChanges(); // don't forget this
          //envio da mensagem
          tr.sendMessage(msg, msg.getAllRecipients());
          tr.close();
          return("mensagem enviada com sucesso");
      } catch (Exception e) {
          
         return ("erro ao enviar");              }
  }

public class SimpleAuth extends Authenticator {
public String username = null;
public String password = null;

  public SimpleAuth(String user, String pwd) {
      username = user;
      password = pwd;
  }

    @Override
  public PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(this.username, this.password);
  }
 }//fim da classe SimpleAuth

}//fim da classe principal[/code]

eae…alguem sabe pq n envia o email?

Manda mostrar o stacktrace e posta pra gente.
Se saber a mensagem de erro fica dificil de ajudar.

kra…utilizei o metodo e.getMessage() para imprimir o erro…
o erro foi:

Unknown SMTP host: smtp.yahoo.com.br 

depois eu mudei meu smtp para: smtp.mail.yahoo.com.br
e deu esse erro:

Exception reading response 

utilizando o metodo .printStackTrace() deu o erro:[code]

javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1764) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1523) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:453) at javax.mail.Service.connect(Service.java:291) at javax.mail.Service.connect(Service.java:172) at SendEmail.Mail(SendEmail.java:86) at email.doGet(email.java:36) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at sun.security.ssl.InputRecord.handleUnknownRecord(Unknown Source) at sun.security.ssl.InputRecord.read(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source) at sun.security.ssl.AppInputStream.read(Unknown Source) at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:106) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:84) at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1742) … 20 more [/code]

…eu não entendi esses erros…se esse não foi o jeito certo de mostrar os erros foi mal ae…

quem souber o problema me da uma ajuda ae porfavor…

flw

alguem pode me ajudar???

Brother, pelo visto ta faltando vc ativar a conexão SSL que é de criptografia que esse servidor precisa pra se conectar.
Aparentemente é isso. Não testei seu código não, mas eu estava com um problema semelhante onde tive que ativar a conexão SSL.

A porta padrão do servidor de e-mail é 110, porém alguns servidores podem utilizar uma porta diferente desta. :wink:

pessoal, soh pra não deixar este tópico sem resolução…

Eu resolvi meu problema criando uma conta no GMAIL e utilizando este mesmo código hauHSAUhauHAUHauHUAHhauHUAHuaHu

soh tive um probleminha…meus emails chegam sempre como spans…alguem sabe fazer o email chegar como email normal?

Usando smtp e portas de conta de Gmail não tem erro

eu sei q o tópico ja esta finalizado a muito tempo porem estava testando o código e não consegui achar o pacote javax.mail será que é a versão do JDK que estou usando ou tem alguma lib pra baixar? valew

Ok resolvido só procurar a lib no google

achei a lib só que agora está dando o seguinte erro:

[quote]HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/activation/DataSource
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/activation/DataSource
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.jsp.musico.enviaEmailSimples_jsp._jspService(enviaEmailSimples_jsp.java:125)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

java.lang.NoClassDefFoundError: javax/activation/DataSource
email.SendEmail.Mail(SendEmail.java:71)
org.apache.jsp.jsp.musico.enviaEmailSimples_jsp._jspService(enviaEmailSimples_jsp.java:84)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.


Apache Tomcat/6.0.14[/quote]

Boa Noite,

Desculpa reabrir o tópico mas gostaria de saber onde eu posso consultar os parametros da classe java.util.Properties para utilizar com Java.mail?

Segue um exemplo abaixo.