Измените почтовые настройки Spring на основе dev/test/prod режима

Я часто тестирую свое приложение с копией живой базы данных, но имею, чтобы не сделать никаких действий, которые заставляют электронное письмо быть отправленным пользователю. Я хотел бы иметь способ настроить пружину так, чтобы, когда я нахожусь в dev или тестовом режиме, что никакое электронное письмо не будет послано реальным пользователям. Идеально, я хотел бы за все электронные письма, которые должны были перейти к пользователю для движения вместо этого в почтовый ящик, который я могу исследовать. И я не хочу изменять любой код, чтобы заставить это произойти, просто xml файлы конфигурации.

Я уже использую PropertyPlaceholderConfigurer и читаю в различных файлах свойств на основе того, если я работаю в производстве, тесте или dev режимах. Я настраиваю JavaMailSenderImpl на основе значений в файле свойств. Я также использую SimpleMailMessage для создания шаблона с От адреса.

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

Моя первая мысль состояла в том, чтобы использовать другой сервер SMTP для dev и теста. Но затем я должен был бы также управлять другим почтовым сервером и должен буду настроить его так, чтобы он не отправлял бы почту в никуда, но вместо этого поставит его отдельному почтовому ящику. Я не хочу добавлять больше требований управления, если это возможно.

Возможно, это - лучшее решение, но кажется, что должен быть способ прервать электронные письма и изменить получателя.

Кто-либо имел дело с этой проблемой прежде? Какие решения Вы предлагали?

5
задан Tauren 24 January 2010 в 12:45
поделиться

3 ответа

Взгляните на mock-javamail (делает то, что предполагает предыдущий ответ) или, возможно, еще более быстрое решение - поддельный SMTP-сервер типа Fakemail.

1
ответ дан 13 December 2019 в 22:07
поделиться

У меня было похожее требование в прошлом, и мое решение было написать то, что я позвонил средахэлектрические эффекты (пружина, кажется, поощряет имена длинных классов ...). Это была реализация реализация , которая будет «выбирать» один из целых доступных бобов, основанных на текущей причине приложения.

Если я покажу вам какой-то пример XML, я думаю, вы получите идею:

<bean id="mailSender" class="com.kizoom.spring.config.EnvironmentSelectingFactoryBean">
   <property name="beanMap">
      <map>
         <entry key="test">
            <bean class="org.springframework.mail.javamail.JavaMailSenderImpl">
               <property name="host" value="${mailhost.test}"/>
            </bean>
         </entry>
         <entry key="production">
            <bean class="org.springframework.mail.javamail.JavaMailSenderImpl">
               <property name="host" value="${mailhost.production}"/>
            </bean>
         </entry>
      </map>
   </property>
</bean>

Итак, Итак, ExtricueseLectingFactoryBean знает ли вы в «тесте» или «производственном» режиме, выбирает Соответствующий фасоль из фасоли , и выплескивает, что наш метод FactoryBean.getObject () . Обе бобы в фасоли являются настоящими почтовыми отправителями, а не заглушками, каждый с различными ценностями Proprty Plactholder, но вы никогда не рискуете получить неправильный.

Клиентский код просто увидит один javamailsender bean.

2
ответ дан 13 December 2019 в 22:07
поделиться

Я вижу, что вы указываете конкретное требование, что вы не хотите изменять код. Я все же хотел бы предложить создать корешковую реализацию JavaMailSender. Таким образом, вы можете ввести объект заглушки в вашу разработку и тестовые сборки.

1
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: