Главная » Spring » Отправка электронной почты Spring

0

В главе 13 мы использовали поддержку обмена сообщениями в Spring для асинхронной отправки другим пользователям приложе- ния Spitter извещений о появлении новых сообщений. Теперь можно воспользоваться поддержкой электронной почты в Spring для от- правки электронных писем.

В состав фреймворка Spring входит API абстракции электронной почты, упрощающий отправку электронных писем.

Настройка отправки электронной почты

Основу абстракции электронной почты в Spring составляет ин- терфейс MailSender. Как следует из его имени и показано на рис. 17.4, реализация MailSender отправляет электронную почту. Фреймворк Spring уже имеет одну готовую реализацию интерфейса MailSender – класс JavaMailSenderImpl.

Рис. 17.4. Интерфейс MailSender

является основой абстракции электронной почты в Spring.

Он обеспечивает отправку электронной почты на почтовый сервер для дальнейшей доставки

А как насчет CosMailSenderImpl? Старые версии Spring, вплоть до версии Spring 2.0 (включительно), предоставляли еще одну реализацию интерфейса MailSender – класс CosMailSenderImpl. Эта реализация была убрана в версии Spring 2.5. Если вы все еще используете ее, перед миг- рацией на версию Spring 2.5 или Spring 3.0 необходимо перейти на ис- пользование класса JavaMailSenderImpl.

Чтобы воспользоваться реализацией JavaMailSenderImpl, в контек- сте приложения Spring необходимо объявить компонент:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="${mailserver.host}"   />

Свойство host определяет доменное имя почтового сервера, ис- пользуемого для отправки электронной почты. Здесь это имя на- страивается с помощью механизма подстановки переменных-заполни- телей, чтобы иметь возможность изменять настройки почтового серве- ра за пределами Spring. По умолчанию реализация JavaMailSenderImpl предполагает, что почтовый сервер принимает соединения на порту 25 (стандартный SMTP-порт). Если ваш почтовый сервер исполь- зует другой порт, укажите правильное значение в свойстве port. На- пример:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="${mailserver.host}"

p:port="${mailserver.port}"/>

Аналогично, если почтовый сервер требует аутентификации, по- требуется также определить значения свойств username и password:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="${mailserver.host}"

p:port="${mailserver.port}" p:username="${mailserver.username}" p:password="${mailserver.password}"   />

Последнее определение демонстрирует полный комплекс парамет- ров настройки, необходимых для доступа к почтовому серверу. При желании можно воспользоваться готовым сеансом связи с почтовым сервером, предварительно настроенным в JNDI. Посмотрим, как на- строить JavaMailSenderImpl на использование такого готового сеанса.

Использование готового сеанса, находящегося в JNDI

Возможно, в вашем репозитории JNDI уже имеется настроенный компонент javax.mail.MailSession  (например, сохраненный сервером

приложений). В этом случае компонент JavaMailSenderImpl может ис- пользовать уже готовый сеанс MailSession.

Мы уже знаем, как с помощью элемента <jee:jndi-lookup> извле- кать объекты из JNDI. Поэтому воспользуемся им для загрузки на- строенного объекта сеанса из JNDI:

<jee:jndi-lookup  id="mailSession"

jndi-name="mail/Session"  resource-ref="true"  />

Теперь готовый сеанс можно внедрить в компонент mailSender:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:session-ref="mailSession"   />

Внедрив готовый объект сеанса в свойство session компонента JavaMailSenderImpl, мы заменили явно указанное имя сервера (а также имя пользователя и пароль). Теперь сеанс связи с почтовым сервером можно хранить и настраивать в JNDI. Реализация JavaMailSenderImpl отвечает за отправку электронной почты, но она не может взаимо- действовать с почтовым сервером по своей инициативе.

Внедрение компонента отправки почты в компонент службы

После настройки компонента, занимающегося отправкой элект- ронной почты, его необходимо внедрить в компонент, который бу- дет использовать его. Наиболее подходящим местом для отправки почты в приложении Spitter является класс SpitterEmailServiceImpl. Этот  класс  имеет  свойство  mailSender,  отмеченное  аннотацией

@Autowired:

@Autowired

JavaMailSender  mailSender;

Когда фреймворк Spring создаст компонент SpitterEmailServiceImpl, он попытается отыскать компонент, реализующий интерфейс Mail- Sender, который можно было бы внедрить в свойство mailSender. В ре- зультате он найдет компонент mailSender и внедрит его. Организовав внедрение компонента mailSender, можно приступать к созданию и отправке электронных писем.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии