#spring #email #jsp #spring-mvc #html-email
#spring #Адрес электронной почты #jsp #spring-mvc #html-электронная почта
Вопрос:
Возможно ли создать электронное письмо с использованием JSP для отправки через механизм JavaMailSender Spring 3.0? JavaMailSender, вероятно, имеет мало общего с этим вопросом, но идея состоит в том, чтобы воспользоваться <fmt:message key="phrasetitle"/>
механизмом интернационализации JSP, его переменным / циклическим JSTL-кодом и позволить дизайнерам легко передавать мне заполненные html-письма.
Кроме того, я мог бы создать веб-страницу, которая импортирует этот JSP, чтобы я мог легко предоставлять ссылку в каждом электронном письме, чтобы иметь возможность просматривать это электронное письмо в Интернете в случае, если их клиент не видит html должным образом.
ОБНОВЛЕНИЕ: В приведенных ниже 2 ответах предлагается использовать Velocity для электронной почты вместо JSP, так что, похоже, это разумный выбор. Однако простое быстрое сканирование stackoverflow позволяет предположить, что FreeMarker может лучше подойти для моих нужд. В частности, я хочу иметь страницу JSP, которая отражает то, что отправляется по электронной почте. Мне придется перевести код с JSP на Velocity или FreeMarker, но преимущество, которое дает мне FreeMarker, заключается в том, что я могу повторно использовать большую часть кода JSP, особенно теги. Имеет ли это смысл?
Ответ №1:
JSP не является технологией создания шаблонов. Для этого, например, лучше использовать Velocity.
Если вы действительно настаиваете на использовании JSP, то вам придется выполнить его локально с помощью java.net.URL
.
InputStream input = new URL("http://localhost:8080/context/mailtemplate.jsp").openStream();
Комментарии:
1. кажется настолько неэффективным вызывать URL, что нет никакого способа сделать это в коде, а не через http?
2. Да, используйте технологию создания шаблонов. JSP — это не так. Это технология просмотра, ориентированная на web / HTTP.
3. Обновил мой вопрос: имеет ли смысл использовать FreeMarker, чтобы я мог повторно использовать большую часть кода JSP, даже если я не могу выполнить полный импорт?
4. Да, это тоже хороший вариант. Velocity был всего лишь первым движком для создания шаблонов, который пришел на ум.
Ответ №2:
Есть некоторая документация Spring по использованию Velocity, которая будет делать то, что вы хотите. Я использую его для обработки электронных писем весной, и он отлично работает.
Что я обычно делаю, так это создаю EmailService, который я вызываю с контроллера, чья работа заключается в отправке электронных писем. Методы внутри них принимают объект Command, доступ к которому осуществляется в шаблоне velocity и который отображается в виде строки (тело электронного письма). Затем вы можете использовать MailSender etc для отправки почты.
Комментарии:
1. Обновил мой вопрос: имеет ли смысл использовать FreeMarker, чтобы я мог повторно использовать большую часть кода JSP, даже если я не могу выполнить полный импорт?
Ответ №3:
Хотя я согласен, что Velocity или Freemarker могут быть лучшим выбором, если вам действительно нужно отобразить JSP и записать выходные данные в виде строки (которую вы могли бы передать в JavaMailer), ознакомьтесь с моим руководством по захвату выходных данных JSP
Он использует Spring 3, а также позволяет использовать fmt: message, fmt: FormatNumber и spring: message. Идея в основном состоит в том, чтобы использовать метод RequestDispatcher.include для преобразования страницы в MockHttpServletRequest.
Комментарии:
1. Очень приятно, хотя в итоге я перешел на Velocity.