Не мог послать электронные письма на Google App Engine

PHP не обеспечивает стандартные средства для ловли и восстановления с фатальных ошибок. Это вызвано тем, что обработка не должна обычно восстанавливаться после фатальной ошибки. Сопоставление строк буфер вывода (как предложено исходным сообщением техника, описанная на PHP.net), определенно опрометчиво. Это просто ненадежно.

Вызов почты () функция из метода обработчика ошибок оказываются проблематичными, также. Если бы у Вас было много ошибок, Ваш почтовый сервер был бы загружен работой, и Вы могли оказаться с непростым ящиком входящих сообщений. Для предотвращения этого Вы могли бы полагать, что выполнение крона периодически просканировало журналы ошибок и отправило уведомления соответственно. Вы также хотели бы изучать программное обеспечение системного мониторинга, такой как Nagios.

Для разговора с битом о регистрации функции завершения работы:

Это верно, что можно зарегистрировать функцию завершения работы, и это - хороший ответ.

точка здесь - то, что мы обычно не должны пытаться восстановиться с фатальных ошибок, особенно не при помощи регулярного выражения против Вашего буфера вывода. Я отвечал принятый ответ , который связался с предложением на php.net, который был с тех пор изменен или удален.

, Что предложение должно было использовать regex против буфера вывода во время обработки исключений, и в случае фатальной ошибки (обнаруженный соответствием против любого настроенного текста ошибки Вы могли бы ожидать), попытайтесь сделать своего рода восстановление, или продолжал обрабатывать. Это не было бы методическими рекомендациями (я верю вот почему, что я не могу найти исходное предложение, также. Я или пропускаю его, или php сообщество подстрелило его).

могло бы стоить отметить, что более свежие версии PHP (приблизительно 5,1), кажется, вызывают функцию завершения работы ранее, прежде чем выходной обратный вызов буферизации будет вызван. В версии 5 и ранее, тот порядок был реверсом (выходной обратный вызов буферизации сопровождался функцией завершения работы). Кроме того, начиная с приблизительно 5.0.5 (который является намного ранее, чем версия 5.2.3 корреспондента), разгружены объекты задолго до того, как зарегистрированная функция завершения работы вызвана, таким образом, Вы не будете в состоянии полагаться на свои объекты в оперативной памяти сделать большую часть чего-либо.

Настолько регистрирующаяся функция завершения работы прекрасна, но вид задач, которые должны быть выполнены функцией завершения работы, вероятно, ограничен горсткой нежных процедур завершения работы.

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

5
задан Ryan A. 19 April 2018 в 08:02
поделиться

3 ответа

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

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

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

5
ответ дан 13 December 2019 в 19:33
поделиться

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

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

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

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

4
ответ дан 13 December 2019 в 19:33
поделиться

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

1
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: