2009-07-12 12 views
5

Je suis fatigué d'utiliser Javamail pour envoyer des e-mails. Mais je suis le message suivantimpossible d'envoyer un e-mail sur google app engine

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

J'ai essayé d'envoyer un courriel de l'administrateur (compte je télécharger l'application) ou l'utilisateur je me connecte l'application comme. (À partir UserService - getCurrentUser().getEmail()) Les deux ont échoué

Je me demande s'il n'y a aucun réglage spécial je dois configurer

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); 

S'il vous plaît Conseiller Merci Roy

+0

Se pourrait-il que vous utilisiez une fausse adresse de destinataire qui n'existe pas réellement? Je ne vois rien de mal avec le code, et j'ai utilisé un code similaire à envoyer avec appengine dans le passé. – jsight

+0

J'ai modifié l'adresse du destinataire dans l'exemple. J'envoie le mail à l'adresse d'admin. –

Répondre

5

C'est vraiment très étrange. Je viens d'écrire l'exemple suivant:

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>"); 
} 

Il n'y avait aucune exception, et j'ai reçu l'email. Êtes-vous sûr qu'il n'y a pas plus de choses dans la demande?

+0

Je n'en ai aucune idée. Mais ça marche maintenant. Merci jsight =) –

4

balayage Juste the documentation on this je constaté ce qui suit:

Pour des raisons de sécurité, l'adresse de l'expéditeur d'un message doit être l'adresse e-mail adresse d'un administrateur de l'application ou le compte Google adresse e-mail de l'utilisateur actuel qui est signé. L'adresse e-mail peut inclure une « répondre à », qui doit également répondre à ces restrictions.

So « email » devrait au moins être remis à votre administrateur emailaccount, ou un emailaccount dédié ajouté en tant qu'administrateur à votre projet ..

Autre que je ne vois pas de problèmes avec votre code ..

+0

J'ai essayé d'utiliser le compte qui télécharge les applications et cela ne fonctionne pas non plus. Même message d'erreur –

1

mes deux cents !! Vérifiez si la fonctionnalité fait partie du serveur plutôt que des classes client.

1

Probablement parce que vous exécutez votre application localement. Téléchargez-le à l'application-moteur et cela fonctionnera bien. * votre adresse e-mail de l'expéditeur doit être l'ID de messagerie avec lequel vous déployez le projet dans le moteur d'application * ou un ID de courrier électronique.

0

Assurez-vous que vous utilisez le message de une adresse e-mail correspondant à l'utilisateur actuellement connecté ou à l'adresse e-mail du compte sur lequel les applications sont déployées.

Le plus important est que les messages ne soient pas envoyés si l'application est exécutée localement. Pour réellement envoyer les messages, déployer dans Google App Engine et l'exécuter à distance.