Невозможно отправить электронную почту в Google App Engine - PullRequest
5 голосов
/ 12 июля 2009

Я пытался использовать 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 ]

5 голосов
/ 13 июля 2009

Это действительно очень странно. Я просто написал следующий пример:

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

Не было никаких исключений, и я получил электронное письмо. Вы уверены, что в реальном приложении больше ничего не происходит?

4 голосов
/ 12 июля 2009

Просто сканируя документацию по этому Я обнаружил следующее:

В целях безопасности отправитель адресом сообщения должен быть адрес электронной почты адрес администратора для приложение или учетная запись Google адрес электронной почты текущего пользователя, который авторизован. Адрес электронной почты может включить адрес для ответа, который также должны соответствовать этим ограничениям.

Таким образом, «электронная почта» должна быть, по крайней мере, возвращена вашей учетной записи администратора электронной почты, или выделенную учетную запись электронной почты, добавленную в качестве администратора к вашему проекту.

Кроме этого, я не вижу проблем с вашим кодом ..

1 голос
/ 30 декабря 2010

Скорее всего, потому что вы запускаете приложение локально. Загрузите его в app-engine, и он будет работать нормально. * электронная почта отправителя должна быть идентификатором почты, с которой вы развертываете проект в app-engine * или идентификатор администратора почты.

1 голос
/ 05 октября 2009

мои два цента !! Проверьте, является ли функциональность частью сервера, а не клиентских классов.

0 голосов
/ 05 июня 2014

Убедитесь, что вы используете сообщение от адрес электронной почты, соответствующий текущему вошедшему в систему пользователю, или адрес электронной почты учетной записи, в которой развернуты приложения.

Самое главное, что сообщения не отправляются, если приложение запускается локально. Чтобы на самом деле отправлять сообщения, разверните в Google App Engine и запустите его удаленно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...