Enviando Email

1 resposta
A

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

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,"[email removido]","******");
      msg.saveChanges();
      transport.sendMessage(msg, msg.getAllRecipients());
      transport.close();
      return  "<center><h2>email enviado com sucesso!!</h2></center>";
   }
}
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; "[email removido]"; 
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"); 
%>

Meu form que aciona o enviaremail

<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:

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)

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

1 Resposta

A

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 = "[email removido]"; 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);
Criado 26 de outubro de 2007
Ultima resposta 1 de nov. de 2007
Respostas 1
Participantes 1