Собственно по теме, чтобы не забыть :
http://www.icegreen.com/greenmail/
Представляет из себя простой почтовый сервер (с разными протоколами - pop,smtp,imap), который может быть внедрён в код и использован для простого тестирования кода, связанного с посылкой/приёмом email-ов.
Пример конфигурации и работы в тестовой spring-конфигурации
Фактически тут просто в тестовой конфигурации подменяется mail-сервер, на greenmail. А у самого greenmail-объекта есть методы для проверки того, что на него посылалось.
https://stackoverflow.com/questions/9661907/testing-greenmail-without-installing-a-smtp-server/9663399#9663399
import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.GreenMailUtil;
import com.icegreen.greenmail.util.ServerSetupTest; ...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("ApplicationContext-Greenmail.xml")
public class EmailServiceIntegrationTest {
/** Class under test */
@Resource
private EmailService emailService;
private GreenMail greenMail;
@Before
public void startMailServer() {
greenMail = new GreenMail(ServerSetupTest.SMTP);
greenMail.start();
}
@After
public void stopMailServer() {
greenMail.stop();
}
@Test
public void testPledgeReminder()
throws InterruptedException, MessagingException {
String mailText = "Hallo World";
String mailSubject = "Hallo";
String mailTo = "test@excaple.com";
/** when: sending a mail */
emailService.send(mailSubject, mailTo, mailText);
assertTrue(greenMail.waitForIncomingEmail(5000, 1));
Message[] messages = greenMail.getReceivedMessages();
assertEquals(1, messages.length);
assertEquals(mailText, messages[0].getSubject());
String body = GreenMailUtil.getBody(messages[0]).replaceAll("=\r?\n", "");
assertEquals(mailText, body);
}
}
important: use port 3025
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="javaMailProperties">
<util:properties>
<prop key="mail.debug">false</prop>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.port">3025</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.user">test@mail.extern</prop>
<prop key="mail.smtp.host">localhost</prop>
<prop key="mail.smtp.from">test@mail.extern</prop>
</util:properties>
</property>
<property name="username" value="test"/>
<property name="password" value="xxx"/>
<property name="defaultEncoding" value="utf8" />
</bean>
Then this configuration will configure a Spring JavaMailSender to send its mails to the GreenMail-Server started and finished by the test code.