2016-07-05 11 views
1

Ich möchte meine Dienste im Frühjahr testen, die E-Mails senden sollte. Ich versuche org.subethamail:subethasmtp zu verwenden.Test Senden von E-Mail im Frühjahr

mein Ziel acieve ich erstellt Service MySender wo ich E-Mail:

@Autowired 
private MailSender mailSender; 

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

dieses Stück Code zu testen I-Test erstellt application.properties (in Prüfumfang):

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

und Testkonfiguration Klasse, die den Wiser-SMTP-Server starten und in Tests wieder verwendbar machen sollte:

@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(); 
    } 

} 

Das erwartete Ergebnis ist, dass die Anwendung E-Mails mit dem Wiser-SMTP-Server sendet und die Anzahl der gesendeten Nachrichten überprüft.

Aber wenn ich Dienstanwendung ausführen wirft MailSendException(Couldn't connect to host, port: 127.0.0.1, 4688; timeout -1;). Aber wenn ich Haltepunkt hinzufügen und versuchen, verbinden Sie mit Telnet SMTP-Server erlauben zu verbinden und werfen Sie nicht Connection refused.

Haben Sie eine Idee, warum ich das Versenden von Mails nicht testen kann?

Voll Code Vorschau ist auf Github verfügbar: https://github.com/karolrynio/demo-mail

+0

Bei einer Vermutung war, desto weiser Server starten nicht beendet ist, wenn der Test ausgeführt wird. Möglicherweise müssen Sie etwas in einem '@ Before 'tun, um sicherzustellen, dass der Socket aktiv ist, bevor Sie den Test ausführen. – Taylor

+0

Ich bin nicht sicher darüber, weil in den Protokollen habe ich Informationen, dass der Server vor den Protokollen aus den Tests gestartet wird, aber ich versuche zu warten, bevor der Server die Tests gestartet. – krynio

+1

Ich habe einen Fehler gefunden. Ursache meiner Probleme war die Konfiguration. Zeile: spring.mail.port = $ {random.int [4000,6000]}, weil spring zwei verschiedene Werte zu Bohnen injizieren. Bean MailSender hat einen anderen Port-Wert als Wiser. Danke für Ihre Hilfe. – krynio

Antwort

0

in den Anwendungseigenschaften können Sie auch

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

die Änderung Ihres Codes haben diese zusätzlichen zwei Werte

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

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

hinzufügen und setzen Sie diese Optionen in Ihren 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(); 

lassen Sie mich wissen, ob dies für Sie

+0

Ich überprüfe es später. Vielen Dank. – krynio

+0

Es funktioniert nicht, aber ich fand andere Bibliothek zum Testen von E-Mails und ich versuche es. – krynio

+0

Was ist diese Bibliothek? – rajadilipkolli