2009-07-12 11 views
5

Me he cansado de utilizar Javamail para enviar correos electrónicos. Pero me dio el siguiente mensajeno se puede enviar correo electrónico en el motor de la aplicación google

javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Illegal Arguments (java.lang.IllegalArgumentException: Bad Request:)) 

He intentado enviar correo electrónico del administrador (cuenta subo la aplicación) o el usuario inicio sesión como la aplicación. (De UserService - getCurrentUser().getEmail()) dos fracasaron

pregunto si hay alguna configuración especial que tengo que configurar

Properties props = new Properties(); 
    Session session = Session.getDefaultInstance(props, null);  
    Message msg = new MimeMessage(session); 
    UserService userService = UserServiceFactory.getUserService(); 
    String email = userService.getCurrentUser().getEmail(); 
    //Or 
    //String email = "[email protected]"; 
    msg.setFrom(new InternetAddress(email)); 
    msg.addRecipient(Message.RecipientType.TO, 
        new InternetAddress("[email protected]")); 
    msg.setSubject("Test Email"); 
    msg.setText("Nobody"); 
    Transport.send(msg); 

por favor avise Gracias Roy

+0

¿Podría ser que esté usando una dirección de destinatario falso que en realidad no existe? No veo nada mal con el código, y he usado un código similar para enviar con appengine en el pasado. – jsight

+0

Cambié la dirección del destinatario en la muestra. Estoy enviando el correo a la dirección de administrador. –

Respuesta

5

Eso es realmente muy extraño. Acabo de escribir el siguiente ejemplo:

UserService userService = UserServiceFactory.getUserService(); 
String thisURL = request.getRequestURI(); 
if (request.getUserPrincipal() != null) { 
    response.getWriter().println("<p>Hello, " + 
           request.getUserPrincipal().getName() + 
           "! You can <a href=\"" + 
           userService.createLogoutURL(thisURL) + 
           "\">sign out</a>.</p>"); 
    Properties props = new Properties(); 
    Session mailSession = Session.getDefaultInstance(props, null);  
    Message msg = new MimeMessage(mailSession); 
    String email = userService.getCurrentUser().getEmail(); 
    //Or 
    //String email = "[email protected]"; 
    msg.setFrom(new InternetAddress(email)); 
    msg.addRecipient(Message.RecipientType.TO, 
        new InternetAddress("[email protected]")); 
    msg.setSubject("Test Email"); 
    msg.setText("Nobody"); 
    Transport.send(msg); 
    response.getWriter().println("<p>Sent email!</p>"); 
} else { 
    response.getWriter().println("<p>Please <a href=\"" + 
           userService.createLoginURL(thisURL) + 
           "\">sign in</a>.</p>"); 
} 

No hubo excepciones y recibí el correo electrónico. ¿Estás seguro de que no hay más en la aplicación real?

+0

No tengo idea. Pero funciona ahora. Gracias jsight =) –

4

Sólo escanear the documentation on this encontré la siguiente:

Por razones de seguridad, el remitente dirección de un mensaje debe ser el correo electrónico dirección de un administrador de la aplicación , o la dirección de correo electrónico de Google cuenta del usuario actual que se firmará en . La dirección de correo electrónico puede incluir una "respuesta" a la dirección, que también deben cumplir con estas restricciones.

Así 'e-mail' debe por lo menos ser fijado de nuevo a su emailaccount admin, o una emailaccount dedicada añadido como administrador para su proyecto ..

Aparte de eso no veo problemas con su código ..

+0

Traté de usar la cuenta que carga las aplicaciones y tampoco funciona. El mismo mensaje de error. –

1

mis dos centavos !! Compruebe si la funcionalidad es parte del servidor en lugar de las clases de cliente.

1

Probablemente porque está ejecutando su aplicación localmente. Subirlo a la aplicación del motor y funcionará bien. * el correo electrónico del remitente debe ser el id. De correo con el que implementa el proyecto en el motor de la aplicación * o una ID de correo electrónico de administrador.

0

Asegúrese de estar utilizando el mensaje de una dirección de correo electrónico correspondiente al usuario que ha iniciado sesión actualmente o al correo electrónico de la cuenta donde se implementan las aplicaciones.

Lo más importante es que los mensajes no se envían si la aplicación se ejecuta localmente. Para enviar realmente los mensajes, implemente en Google App Engine y ejecútelo de forma remota.

Cuestiones relacionadas