Как использовать Spring в качестве хранилища электронной почты

#java #email

#java #Адрес электронной почты

Вопрос:

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

Ответ №1:

У Spring на самом деле нет решения для этого варианта использования.

Есть несколько вариантов:

  1. Настройте SMTP-сервер на локальном хостинге таким образом, чтобы он передавал сообщение центральному экземпляру. Это удаляет сетевое соединение между вашим приложением и почтовым сервером, следовательно, мы надеемся, что вероятность того, что оно не будет достигнуто, очень мала.
  2. Сохраните сообщение в базе данных, что не идеально, поскольку, если существует проблема с сетью, которая не позволяет получить доступ к почтовому серверу, легко может возникнуть проблема с сетью, которая влияет на доступ к базе данных. Также вам нужно будет создать какой-то процесс повторной отправки сообщения каждые x минут
  3. Отправьте сообщение в локальную постоянную очередь JMS, затем попросите компонент, управляемый сообщениями (или spring messaging container), удалить сообщение и отправить его на почтовый сервер

По моему личному опыту, вариант 1. обычно приближает меня к необходимому уровню обслуживания, но вам придется оценить свои собственные требования.

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

Ответ №2:

На самом деле это не весенний вопрос. То, о чем вы просите, — это механизм отправки почты, который может ставить отправки в очередь при сбое с повторными попытками. Вы могли бы, конечно, создать компонент с такими возможностями и подключить его через Spring; я бы предположил, что это было бы очень полезно в некоторых ситуациях.

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

1. Спасибо вам обоим, Гарету и Джозефу, за ваш быстрый ответ. Я думаю, что будет полезно сохранять сообщения в базе данных или очереди, как вы предлагаете. но я подумал, что может быть способ для этого, как указано в wheelersoftware.com/articles/spring-javamail.html

2. Я только быстро просмотрел эту статью, но я не смог увидеть ничего, кроме того, как использовать API для отправки писем … ничего об обработке вашего варианта использования .. возможно, я что-то упускаю