Foros del Web » Programación para mayores de 30 ;) » Java »

Problema Servlet y SendMail

Estas en el tema de Problema Servlet y SendMail en el foro de Java en Foros del Web. Comundiad de foros web, escribo porque en verdad ya llevo un par de dias buscando dia y noche el motivo de mi problema y no ...
  #1 (permalink)  
Antiguo 18/03/2009, 10:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
Exclamación Problema Servlet y SendMail

Comundiad de foros web, escribo porque en verdad ya llevo un par de dias buscando dia y noche el motivo de mi problema y no lo logre solucionar.
El punto es que estoy programando un servlet el cual mande un correo a una cuenta especifica por medio del protocolo smtp a una cuenta de gmail.

Empeze por hacer una clase independiente con su metodo main para probarla y verificar que funcionara con las librerias activation.jar y mail.jar y todo funciono a la perfeccion, el mail llega sin ningun problema a la cuenta de gmail aqui el ejemplo:

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 EnviarMail
{

public static void main(String[] args)
{
try
{
// Conexion
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.starttls.enable", "true");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.user", "cuenta_correo");
props.setProperty("mail.smtp.auth", "true");

// Sesion
Session session = Session.getDefaultInstance(props);

// Construccion del msj
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("cuenta_correo"));
message.addRecipient(Message.RecipientType.TO,new InternetAddress("cuenta_correo"));
message.setSubject("Hola");
message.setText("Mensaje del correo");

// Envio
Transport t = session.getTransport("smtp");
t.connect("cuenta_correo", "pass");
t.sendMessage(message, message.getAllRecipients());

// Cierre.
t.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

Este ejemplo lo hace todo bien y lo manda a la cuenta de correo especificada, pero al intentarlo hacerlo en un servlet, lo cargo y a la hora de mandar llamar a la clase desde el action form del jsp o html se queda en una pantalla en blanco, estuve buscando en que parte especifica era la que me mandaba a ese pantallazo en blanco y fue la linea en la que intenta conectarse:

t.connect("smtp.gmail.com", "cuenta_correo", "pass");

Aqui pongo todo el codigo del servlet y espero que alguien pueda ayudarme, de antemano muchas gracias.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
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 EnviarMail extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
try
{
// Conexión
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.starttls.enable", "true");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.user", "cuenta_correo");
props.setProperty("mail.smtp.auth", "true");

// sesión
Session session = Session.getDefaultInstance(props,null);

// Construcción del msj
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("cuenta_correo"));
message.addRecipient(Message.RecipientType.TO,new InternetAddress("cuenta_correo"));
message.setSubject("Hola");
message.setText("Mense del correo");


// Envio
Transport t = session.getTransport("smtp");
t.connect("smtp.gmail.com", "cuenta_correo", "pass");
t.sendMessage(message, message.getAllRecipients());

// Cierre.
t.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

P.D. Los recursos que estoy utilizando son tomcat 5.5, ubuntu 8.10, jdk 1.6
  #2 (permalink)  
Antiguo 19/03/2009, 09:20
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problema Servlet y SendMail

pues yo creo que se queda en blanco por que no le mandas nada al stream de salida ni lo redireccionas a otra pagina, entonces por logica corre el servlet pero no se refleja nada en el navegador

Saludos
  #3 (permalink)  
Antiguo 22/03/2009, 11:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Respuesta: Problema Servlet y SendMail

Resulta que hice algunas modificaciones en el codigo para que verificar que es lo que cacha la exepcion, y resulta que me marca lo siguiente:

java.security.AccessControlException: access denied (java.net.SocketPermission smtp.gmail.com resolve)

Y en el log me marca lo siguiente:
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.coyote)
at java.security.AccessControlContext.checkPermission (AccessControlContext.java:342)
at java.security.AccessController.checkPermission(Acc essController.java:553)
at java.lang.SecurityManager.checkPermission(Security Manager.java:549)
at java.lang.SecurityManager.checkPackageAccess(Secur ityManager.java:1529)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:291)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 16)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 68)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:336)
at org.apache.coyote.http11.Http11Processor.prepareRe sponse(Http11Processor.java:1558)
at org.apache.coyote.http11.Http11Processor.action(Ht tp11Processor.java:935)
at org.apache.coyote.Response.action(Response.java:18 3)
at org.apache.coyote.Response.sendHeaders(Response.ja va:379)
at org.apache.catalina.connector.OutputBuffer.doFlush (OutputBuffer.java:305)
at org.apache.catalina.connector.OutputBuffer.close(O utputBuffer.java:273)
at org.apache.catalina.connector.CoyoteWriter.close(C oyoteWriter.java:108)
at EnviarMail.doPost(EnviarMail.java:74)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:717)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.catalina.security.SecurityUtil$1.run(Se curityUtil.java:244)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject .java:537)
at org.apache.catalina.security.SecurityUtil.execute( SecurityUtil.java:276)
at org.apache.catalina.security.SecurityUtil.doAsPriv ilege(SecurityUtil.java:162)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:283)
at org.apache.catalina.core.ApplicationFilterChain.ac cess$000(ApplicationFilterChain.java:56)
at org.apache.catalina.core.ApplicationFilterChain$1. run(ApplicationFilterChain.java:189)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:191)
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.invok e(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:636)

Busque en algunos foros y al parecer es un problema de permisos, en el que algunos decian de modificar los archivos tipo policy, pero no logre hacerlo funcionar, espero y que con esta retroalimentación alguien me ayude a identificar como resolverlo, un saludo.
  #4 (permalink)  
Antiguo 22/03/2009, 13:18
 
Fecha de Ingreso: marzo-2009
Mensajes: 11
Antigüedad: 15 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Problema Servlet y SendMail (Solucionado)

Pues despues de varios dias buscando encontre la solución a mi problema resulta que hay me modificar el siguiente archivo:

/var/lib/tomcat6/conf/policy.d/50local.policy

y agregar las siguiente lineas

permission java.net.SocketPermission "smtp.gmail.com", "connect,resolve";
permission java.io.FilePermission "${catalina.base}/temp/-", "read,write";

De manera que la estructura final queda mas o menos de la siguiente manera:

grant codeBase "file:${catalina.base}/webapps/EnviarMail/-" {
permission java.net.SocketPermission "smtp.gmail.com", "connect,resolve";
permission java.io.FilePermission "${catalina.base}/temp/-", "read,write";
};
//
// The permissions granted to the context WEB-INF/classes directory
grant codeBase "file:${catalina.base}/webapps/examples/WEB-INF/classes/-" {
};

Nota: Cambiar el nombre de la carpeta EnviarMail por la de su aplicación,

Saludos y espero que si alguien mas tiene problemas con esto lo pueda solucionar.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.