Spring MVC и email. Отправка электронной почты (email) с помощью Apache Velocity Templates

Отправка электронной почты (email) с помощью Spring MVC и Apache Velocity Templates.

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Используемые технологии и библиотеки
  • Spring MVC 4.2.4.Release
  • Apache Velocity 1.7
  • Maven 3.2.5
  • IntelliJ IDEA 15.0.2

1. Описание задачи

Научиться отправлять электронную почту из веб приложения на Spring MVC с помощью встроенных классов из пакета org.springframework.mail.javamail и популярного процессора шаблонов — Apache Velocity.

2. Структура проекта

email projectStructure

В этом проекте используются java классы для работы с почтой (EmailControllerEmailModelEmailService), шаблон электронного письма (registered.vm) и страница в нашем веб приложении (email.jsp).

3. Необходимые зависимости pom.xml

Для работы с электронной почтой нам понадобится подключить дополнительные библиотеки спринг (артефакт spring-context-support), в которых находится пакет org.springframework.mail.javamail. Также подключим библиотеку для генерации шаблонов писем и стандартную библиотеку javax.mail:

полный файл pom.xml:

4. Настройки spring mvc

Относительно предыдущей части (Spring MVC и JDBC) нам необходимо настроить конфигурацию только в application-context.xml.

Для этой статьи были добавлены бины ‘mailSender‘ и ‘velocityEngine‘. В первом мы задаем имя и пароль от вашего почтового сервера (в моем случае это логин-пароль от моей почты на Gmail), затем указываются свойства  smtp сервера. В скобочках с значком доллара используются значения из utils.properties (описаны в статье spring mvc и jdbc).

utils.properties:

Здесь задан почтовый сервер Gmail и реальный логин и пароль от почтового ящика (здесь, понятное дело, они изменены).

Файл mvc-config.xml без изменений:

5. web.xml

В web.xml ничего от начала не изменилось, но следует обратить внимание на encodingFilter, который поможет вам справиться с некорректном отображением русских символов.

6. Java классы для работы с почтой

В проекте используются три класса. Контроллер, который перехватывает запросы, модель для работы с почтой и сервисный класс. С помощью последнего мы будем создавать шаблон письма и отправлять его пользователю.

EmailModel:

Как видно, здесь задаются: имя, пароль, почтовый адрес и тело сообщения.

EmailService:

Наиболее важный класс для темы статьи. Вначале создаются константы, которые требуются для задания характеристик почты (от кого, кому, тема, тело письма). Переменных там может быть много и за подробностями обратитесь к Apache. С помощью метода sendMail создается само письмо на основании переданной в качестве аргумента модели (Map model). Обратите внимание на создание переменной message и как туда передается параметр для кодировки. Если этого не сделать, то с русскими символами нормально работать будет затруднительно.

В этой строчке мы создаем само письмо на основании бина velocityEngine (см. настройки application-context.xml, используется через автосвязывание в этом классе), шаблона (registered.vm — будет показан чуть ниже), а так же кодировки и модели письма. Далее с помощью внедренного автосвязыванием объекта (бин mailSender из настроек application-context.xml) мы отправляем письмо адресату вызывав mailSender.send() с переданным объектом из только что описанного метода prepare() анонимного класса.

EmailController:

Контроллер перехватывает post запрос и далее заполняет модель используя данные с формы сайта и хардкорные данные, которые были придуманы для этой статьи. Параметр @ModelAttribute(«emailModel») EmailModel emailModel создается на jsp странице и будет описан чуть ниже.

Дополнительно хочу отметить, что лучше использовать в качестве ключа статичные переменные, которые были объявлены в классе EmailService, т.е. вот так model.put(EmailService.FROM, «javastudy@mvc.app»);

7. Шаблон письма электронной почты

Здесь использовался обычный html код, в некоторых местах которого были вставлены переменные с помощью значка доллара (например $userName). Эти переменные заполнялись чуть выше в модели вот так —  model.put(«userName», «javastudyUser»);

registered.vm:

Как видите, это просто таблица с некоторыми стилями и несколькими переменными: $urljavastudy, $userName, ${message}.

8. JSP страница веб приложения

На JSP странице была создана форма, которая была связана с объектом ‘emailModel‘ (смотрите параметры метода контроллера @ModelAttribute).

9. Запуск проекта

Заполнение формы на сайте:

send Email

Результат в почте Gmail:

get Email

 

Исходные коды

MVC_AngularJS_Html5 full project — полный проект Spring MVC + AngularJS + Bootstrap + HTML5.

4. Email with Spring MVC — код для этой части

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Share Button
16
10070 Total Views 2 Views Today

Добавить комментарий