无法在Google App Engine上发送电子邮件

时间:2009-07-12 17:06:14

标签: java google-app-engine javamail

我曾尝试使用Javamail发送电子邮件。但是,我收到了以下消息:

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

我试图从管理员帐户(我用来上传应用程序)发送电子邮件,以及我登录到应用程序的用户帐户。 (来自UserService - getCurrentUser().getEmail())都失败了。

我想知道我是否需要设置任何特殊设置?

    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 = "my_admin_account@gmail.com";
    msg.setFrom(new InternetAddress(email));
    msg.addRecipient(Message.RecipientType.TO,
                     new InternetAddress("some_test_email@gmail.com"));
    msg.setSubject("Test Email");
    msg.setText("Nobody");
    Transport.send(msg);

5 个答案:

答案 0 :(得分:5)

这真的很奇怪。我刚刚写了以下示例:

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 = "my_admin_account@gmail.com";
    msg.setFrom(new InternetAddress(email));
    msg.addRecipient(Message.RecipientType.TO,
                     new InternetAddress("jesse.sightler@gmail.com"));
    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>");
}

没有例外,我收到了电子邮件。你确定在实际应用中没有更多的事情发生吗?

答案 1 :(得分:4)

刚刚扫描the documentation on this我发现了以下内容:

  

出于安全考虑,发件人   邮件地址必须是电子邮件   管理员的地址   应用程序或Google帐户   当前用户的电子邮件地址   已登录。电子邮件地址可以   包括“回复”地址   还必须满足这些限制。

所以'电子邮件'至少应该回到您的管理员电子邮件帐户, 或者作为管理员添加专用的电子邮件帐户到您的项目..

除此之外,我发现你的代码没有问题..

答案 2 :(得分:1)

我的两分钱!检查功能是否是服务器的一部分而不是客户端类。

答案 3 :(得分:1)

很可能是因为您在本地运行应用程序。 将其上传到app-engine,它会正常工作。 * 您的发件人电子邮件应该是您将项目部署到app-engine的邮件ID * 或管理员邮件ID。

答案 4 :(得分:0)

确保您使用中的消息与当前登录用户对应的电子邮件地址或部署应用程序的帐户的电子邮件地址。

最重要的是,如果应用程序在本地运行,则不会发送消息。要实际发送消息,将其部署到Google App Engine并远程运行。