2009-07-12 18 views
5

Mi sono stancato di utilizzare Javamail per inviare email. Ma ho ottenuto il seguente messaggioimpossibile inviare email su google app engine

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

ho cercato di inviare e-mail da admin (conto a caricare l'applicazione) o l'utente faccio il login l'applicazione come. (Da UserService - getCurrentUser().getEmail()) Entrambi falliti

chiedo se ci sia alcun intervento speciale Devo installare

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

Si prega di avvisare Grazie Roy

+0

Potrebbe essere che si sta utilizzando un indirizzo di destinatario falso che in realtà non esiste? Non vedo nulla di sbagliato nel codice e ho usato un codice simile da inviare con appengine in passato. – jsight

+0

Ho cambiato l'indirizzo del destinatario nell'esempio. Sto inviando la posta all'indirizzo dell'amministratore. –

risposta

5

Questo è davvero molto strano. Ho appena scritto il seguente esempio:

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

Non ci sono state eccezioni e ho ricevuto l'e-mail. Sei sicuro che non ci sia più nell'applicazione reale?

+0

Non ne ho idea. Ma ora funziona. Grazie jsight =) –

4

Proprio la scansione the documentation on this ho trovato il seguente:

Per motivi di sicurezza, l'indirizzo del mittente deve essere l'e-mail indirizzo di un amministratore per l'applicazione , o l'indirizzo email dell'account Google dell'utente corrente che viene effettuato. L'indirizzo e-mail può includere una "risposta a" indirizzo, che deve anche rispondere a queste restrizioni.

Cosi 'e-mail' dovrebbe per lo meno essere impostato di nuovo al vostro emailaccount amministrazione, o un emailaccount dedicato aggiunto come amministratore al progetto ..

Diverso da quello che non vedo problemi con il tuo codice ..

+0

Ho provato a utilizzare l'account che carica le app e non funziona neanche. Lo stesso messaggio di errore. –

1

i miei due centesimi !! Verificare se la funzionalità fa parte del server anziché delle classi client.

1

Molto probabilmente perché si esegue l'applicazione localmente. Caricarlo su app-engine e funzionerà correttamente. * l'e-mail del mittente deve essere l'id di posta con cui si distribuisce il progetto a app-engine * o un ID di posta di amministratore.

0

Assicurarsi di utilizzare il messaggio da un indirizzo e-mail corrispondente all'utente attualmente connesso o l'indirizzo e-mail dell'account in cui vengono distribuite le applicazioni.

La cosa più importante è che i messaggi non vengono inviati se l'applicazione viene eseguita localmente. Per inviare effettivamente i messaggi, distribuire lo in Google App Engine ed eseguirlo da remoto.