Я часто тестирую свое приложение с копией живой базы данных, но имею, чтобы не сделать никаких действий, которые заставляют электронное письмо быть отправленным пользователю. Я хотел бы иметь способ настроить пружину так, чтобы, когда я нахожусь в dev или тестовом режиме, что никакое электронное письмо не будет послано реальным пользователям. Идеально, я хотел бы за все электронные письма, которые должны были перейти к пользователю для движения вместо этого в почтовый ящик, который я могу исследовать. И я не хочу изменять любой код, чтобы заставить это произойти, просто xml файлы конфигурации.
Я уже использую PropertyPlaceholderConfigurer и читаю в различных файлах свойств на основе того, если я работаю в производстве, тесте или dev режимах. Я настраиваю JavaMailSenderImpl на основе значений в файле свойств. Я также использую SimpleMailMessage для создания шаблона с От адреса.
Идеально был бы способ переписать к К адресу всей исходящей почты в тестовую учетную запись, если я работаю в dev или тестовом режиме.
Моя первая мысль состояла в том, чтобы использовать другой сервер SMTP для dev и теста. Но затем я должен был бы также управлять другим почтовым сервером и должен буду настроить его так, чтобы он не отправлял бы почту в никуда, но вместо этого поставит его отдельному почтовому ящику. Я не хочу добавлять больше требований управления, если это возможно.
Возможно, это - лучшее решение, но кажется, что должен быть способ прервать электронные письма и изменить получателя.
Кто-либо имел дело с этой проблемой прежде? Какие решения Вы предлагали?
Взгляните на mock-javamail (делает то, что предполагает предыдущий ответ) или, возможно, еще более быстрое решение - поддельный SMTP-сервер типа Fakemail.
У меня было похожее требование в прошлом, и мое решение было написать то, что я позвонил средахэлектрические эффекты
(пружина, кажется, поощряет имена длинных классов ...). Это была реализация реализация
, которая будет «выбирать» один из целых доступных бобов, основанных на текущей причине приложения.
Если я покажу вам какой-то пример 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.
Я вижу, что вы указываете конкретное требование, что вы не хотите изменять код. Я все же хотел бы предложить создать корешковую реализацию JavaMailSender. Таким образом, вы можете ввести объект заглушки в вашу разработку и тестовые сборки.