5

我曾尝试使用 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);
4

5 回答 5

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

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

于 2009-07-13T03:56:13.583 回答
4

只需扫描有关此的文档,我发现以下内容:

为安全起见,邮件的发件人地址必须是应用程序管理员的电子邮件地址,或者是当前登录用户的 Google 帐户电子邮件地址。电子邮件地址可以包含“回复”地址,即也必须满足这些限制。

因此,“电子邮件”至少应设置回您的管理员电子邮件帐户,或作为管理员添加到您的项目的专用电子邮件帐户。

除此之外,我认为您的代码没有问题..

于 2009-07-12T19:03:33.803 回答
1

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

于 2009-10-05T13:28:22.767 回答
1

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

于 2010-12-30T06:59:28.060 回答
0

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

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

于 2014-06-05T14:40:56.633 回答