春にサービスをテストして電子メールを送信する必要があります。 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
のために働いていた場合、賢明サーバは、テストの実行時に起動完了していません。 '@ Before'で何かをして、テストを実行する前にソケットがアクティブであることを確認する必要があるかもしれません。 – Taylor
ログでは、テストからのログの前にサーバーが起動されているという情報がありますが、テストを実行する前にサーバーの起動を試行しているため、わかりません。 – krynio
エラーが見つかりました。私の問題の原因は構成でした。行:spring.mail.port = $ {random.int [4000,6000]}。春は2つの異なる値をBeanに注入するためです。 Bean MailSenderはWiserとは異なるポート値を持っています。ご協力いただきありがとうございます。 – krynio