2016-07-05 6 views
1

Я хочу проверить свои услуги весной, которая должна отправлять электронные письма. Я стараюсь использовать org.subethamail:subethasmtp.Проверка отправки электронной почты весной

Чтобы успешно достичь своей цели я создал службу MySender, где я отправить по электронной почте:

@Autowired 
private MailSender mailSender; 

//... 
    SimpleMailMessage message = new SimpleMailMessage(); 
    message.setTo("[email protected]"); 
    message.setSubject("Subject"); 
    message.setText("Text"); 
    mailSender.send(message); 
// ... 

Чтобы проверить этот кусок кода я создал тест application.properties (в тестовом объеме):

spring.mail.host=127.0.0.1 
spring.mail.port=${random.int[4000,6000]} 

И тест конфигурации класс, который должен запустить Wiser SMTP-сервер и сделать его многоразовым в тестах:

@Configuration 
public class TestConfiguration { 

    @Autowired 
    private Wiser wiser; 

    @Value("${spring.mail.host}") 
    String smtpHost; 

    @Value("${spring.mail.port}") 
    int smtpPort; 

    @Bean 
    public Wiser provideWiser() { 
     // provide wiser for verification in tests 
     Wiser wiser = new Wiser(); 
     return wiser; 
    } 

    @PostConstruct 
    public void initializeMailServer() { 
     // start server 
     wiser.setHostname(smtpHost); 
     wiser.setPort(smtpPort); 
     wiser.start(); 
    } 

    @PreDestroy 
    public void shutdownMailServer() { 
     // stop server 
     wiser.stop(); 
    } 

} 

Ожидаемый результат: приложение отправляет электронное письмо с использованием Wiser smtp-сервера и проверяет количество отправленных сообщений.

Но когда я запускаю служебное приложение, то выбрасывает MailSendException(Couldn't connect to host, port: 127.0.0.1, 4688; timeout -1;). Но когда я добавляю точку останова и пытаюсь подключиться с помощью сервера telnet smtp, позвольте подключиться и не бросать Connection refused.

У вас есть идеи, почему я не могу проверить отправку писем?

Полный код предварительного просмотра доступен на GitHub: https://github.com/karolrynio/demo-mail

+0

На догадке, мудрее сервер не закончил, начиная, когда тест выполняется. Возможно, вам нужно что-то сделать в '@ Before', чтобы убедиться, что сокет активен до запуска теста. – Taylor

+0

Я не уверен в этом, потому что в журналах у меня есть информация о том, что сервер запускается до журналов из тестов, но я пытаюсь дождаться запуска сервера до запуска тестов. – krynio

+1

Я нашел ошибку. Причиной моих проблем была конфигурация. Линия: spring.mail.port = $ {random.int [4000,6000]}, потому что весна впрыскивает 2 разных значения в фасоль. Bean MailSender имеет другое значение порта, чем Wiser. Спасибо за вашу помощь. – krynio

ответ

0

в свойствах приложения вы можете также добавить

mail.smtp.auth=false 
mail.smtp.starttls.enable=false 

Изменение кода, чтобы эти дополнительные два значения

@Value("${mail.smtp.auth}") 
private boolean auth; 

@Value("${mail.smtp.starttls.enable}") 
private boolean starttls; 

и поместите эти параметры в свой initializeMailServer

Properties mailProperties = new Properties(); 
mailProperties.put("mail.smtp.auth", auth); 
mailProperties.put("mail.smtp.starttls.enable", starttls); 
wiser.setJavaMailProperties(mailProperties); 
wiser.setHostname(smtpHost); 
wiser.setPort(smtpPort); 
wiser.start(); 

дайте мне знать, если это работает для вас

+0

Я проверяю его позже. Благодарю. – krynio

+0

Это не работает, но я нашел другую библиотеку для тестирования отправки электронных писем, и я попробую. – krynio

+0

Что это за библиотека – rajadilipkolli

Смежные вопросы