Отправка электронных писем с помощью JSP и Spring 3.0

#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.