Enviando Email

Olá! Seguindo um exemplo que se não estou enganado, peguei aqui mesmo no fórum, criei uma classe em java que é chamada por um jsp para enviar um email de recuperação de senha. Segue abaixo os códigos

Email.Java

[code]package Email;

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Email {

public String sendMail (String mailServer, String subject,String to,String from, String mensagem)throws AddressException, MessagingException {

  Properties props = System.getProperties();
  /*props.put("mail.smtp.host", mailServer);
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.port", "587");*/
  //testes
  props.put ("mail.smtp.host",mailServer); 
  props.put("mail.smtp.auth", "true"); 
  props.put("mail.debug", "true"); 
  props.put("mail.smtp.debug", "true"); 
  props.put("mail.mime.charset", "ISO-8859-1"); 
  props.put("mail.smtp.port", "465"); 
  props.put ("mail.smtp.starttls.enable", "true"); 
  props.put ("mail.smtp.socketFactory.port", "465"); 
  props.put ("mail.smtp.socketFactory.fallback", "false"); 
  props.put ("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  
  Session session = Session.getDefaultInstance(props);//recebe props
           
  InternetAddress destinatario = new InternetAddress (to);
  InternetAddress remetente = new InternetAddress (from);

  Message msg = new MimeMessage(session);
  msg.setSentDate(new Date());//novo
  msg.setFrom(remetente);
  msg.setRecipient( Message.RecipientType.TO, destinatario );
  msg.setSubject (subject);
  msg.setContent (mensagem.toString(), "text/HTML");

  Transport transport = session.getTransport("smtp.gmail.com");
  transport.connect(mailServer,"meuemail@gmail.com","******");
  msg.saveChanges();
  transport.sendMessage(msg, msg.getAllRecipients());
  transport.close();
  return  "<center><h2>email enviado com sucesso!!</h2></center>";

}
}[/code]

enviaremail.jsp

<%@page import="Email.Email" %> 
<jsp:useBean id="email" class="Email.Email"/> 

<% 

String mailServer = "smtp.gmail.com"; 
String assunto = request.getParameter("assunto"); 
String para =&nbsp; "meuemail@gmail.com"; 
String de = request.getParameter("de"); 
String mensagem;
mensagem = "Assunto..:" + request.getParameter("assunto") + "<br>" + "E-mail..:" + request.getParameter("de") + "<br>" + "Fone..:" + request.getParameter("fone") + "<br>" + request.getParameter("obs")+ "<br> \n";
email.sendMail(mailServer, assunto, para, de, mensagem);
response.sendRedirect("ok.html"); 
%> [/code]

Meu form que aciona o enviaremail

[code]<form name="formCad" action="enviaremail.jsp" method="get"
              enctype="text/plain">
  
  <table width="65%" align="center" border="2" bordercolor=#5378D0>
   <tr bordercolor="#FFFFFF"><td><br></td><td><br></td>
   </tr> 
   <tr bordercolor="#FFFFFF">
      <td width="34%"><b>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Login:</b></td>
      <td width="86%"><input type="text" name="txtLogin" maxlength="50" size="50"/></td>
    </tr>
    <tr bordercolor="#FFFFFF">
      <td><b>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp E-Mail:</b></td>
      <td><input type="text" name="txtMail" maxlength="50" size="50"/></td>
    </tr>
    <tr bordercolor="#FFFFFF">
      <td height="61"> <div align="right">
          <input name="btnEnviar" type="submit" value="&nbsp;Enviar&nbsp;" />
        </div></td>
      <td height="61"> <div align="center">&nbsp&nbsp<input type="reset" name="limpar" value="&nbsp;Limpar&nbsp;" /></td>   
    </tr>
  
  </table>
    <center>Informe seu <b>Login</b> e <b>E-Mail</b> que constam nos seus dados pessoais, para receber sua senha por e-mail.</center>
 
    </form>

Quando executo somente o java, ele funciona corretamente, mas quando executo pela página jsp aparece o seguinte erro:

[quote]javax.mail.NoSuchProviderException: No provider for smtp.gmail.com
at javax.mail.Session.getProvider(Session.java:455)
at javax.mail.Session.getTransport(Session.java:650)
at javax.mail.Session.getTransport(Session.java:631)
at Email.Email.sendMail(Email.java:44)
at _fsmc._tutorial._samples._enviaremail._jspService(_enviaremail.java:102)
[SRC:/fsmc/tutorial/samples/enviaremail.jsp:50]
at com.orionserver[Oracle Containers for J2EE 10g (10.1.3.0.0) ].http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:416)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:478)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:401)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:230)
at oracle.oc4j.network.ServerSocketAcceptHandler.access$800(ServerSocketAcceptHandler.java:33)
at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:831)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:595)[/quote]

O que pode ser??? Aparentemente os jars necessários estão todos corretamente instalados.

Depois de muito trampo consegui descobrir qual era o erro. Faltava o seguinte trecho de código:

Faltava este método:

public class SMTPAuthenticator extends Authenticator { public PasswordAuthentication getPasswordAuthentication() { String username = "usuario@gmail.com"; String password = "****"; return new PasswordAuthentication(username, password); } }

E essas duas linha aqui dentro do método de enviar email:

    Authenticator auth = new SMTPAuthenticator();
      Session mailSession = Session.getDefaultInstance(mailProps, auth);