2016-07-05 12 views
1

春にサービスをテストして電子メールを送信する必要があります。 org.subethamail:subethasmtpを使用しようとしています。私は電子メールを送信するサービスMySender作成した私の目標acieveするSpringでの電子メール送信のテスト

:私は(テスト範囲で)テストapplication.propertiesを作成したコードのこの部分をテストするには

@Autowired 
private MailSender mailSender; 

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

を:

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 serverを使って接続しようとすると、接続することを許可し、Connection refusedを投げないでください。

メールの送信をテストできない理由はありますか?

完全なコードプレビューはgithubの上で提供されています:あなたはまた、これらの余分な2つの値を持つように

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

変更をあなたのコードを追加することができ https://github.com/karolrynio/demo-mail

+0

のために働いていた場合、賢明サーバは、テストの実行時に起動完了していません。 '@ Before'で何かをして、テストを実行する前にソケットがアクティブであることを確認する必要があるかもしれません。 – Taylor

+0

ログでは、テストからのログの前にサーバーが起動されているという情報がありますが、テストを実行する前にサーバーの起動を試行しているため、わかりません。 – krynio

+1

エラーが見つかりました。私の問題の原因は構成でした。行:spring.mail.port = $ {random.int [4000,6000]}。春は2つの異なる値をBeanに注入するためです。 Bean MailSenderはWiserとは異なるポート値を持っています。ご協力いただきありがとうございます。 – krynio

答えて

0

アプリケーションのプロパティで

@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

関連する問題