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アカウントのメールアドレスである必要があります。メールアドレスには、「返信先」アドレスを含めることができます。これらの制限も満たす必要があります。

したがって、「email」は、少なくとも管理者の電子メールアカウント、または管理者としてプロジェクトに追加された専用の電子メールアカウントに戻す必要があります。

それ以外は、コードに問題はありません。

于 2009-07-12T19:03:33.803 に答える
1

私の2セント!! 機能がクライアント クラスではなくサーバーの一部であるかどうかを確認します。

于 2009-10-05T13:28:22.767 に答える
1

おそらく、アプリケーションをローカルで実行しているためです。 それを app-engine にアップロードすると、正常に動作します。 *送信者の電子メールは、プロジェクトを app-engine にデプロイする際に使用するメール ID * または管理者のメール ID にする必要があります。

于 2010-12-30T06:59:28.060 に答える
0

現在ログインしているユーザーに対応する電子メール アドレスからのメッセージ、またはアプリケーションが展開されているアカウントの電子メールを使用していることを確認してください。

最も重要なことは、アプリケーションがローカルで実行されている場合、メッセージが送信されないことです。実際にメッセージを送信するには、Google App Engine にデプロイしてリモートで実行します。

于 2014-06-05T14:40:56.633 に答える