2017-03-13 18 views
2

Spring Bootを使用して電子メールを送信する方法をチェックしています。 標準のSpringブートモジュールを使用して電子メールを送信し、Thymeleafテンプレートエンジンを使用してメッセージのHTMLコンテンツを準備します。 これは、この私のテストクラスSpring BootとThymeleafでHTML電子メールを送信

私のコンピュータでテストを実行する
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(Application.class) 
public class MailClientTest { 

    @Autowired 
    private MailClient mailClient; 

    private GreenMail smtpServer; 

    @Before 
    public void setUp() throws Exception { 
     smtpServer = new GreenMail(new ServerSetup(25, null, "smtp")); 
     smtpServer.start(); 
    } 

    @Test 
    public void shouldSendMail() throws Exception { 
     //given 
     String recipient = "[email protected]"; 
     String message = "Test message content"; 
     //when 
     mailClient.prepareAndSend(recipient, message); 
     //then 
     String content = "<span>" + message + "</span>"; 
     assertReceivedMessageContains(content); 
    } 

    private void assertReceivedMessageContains(String expected) throws IOException, MessagingException { 
     MimeMessage[] receivedMessages = smtpServer.getReceivedMessages(); 
     assertEquals(1, receivedMessages.length); 
     String content = (String) receivedMessages[0].getContent(); 
     System.out.println(content); 
     assertTrue(content.contains(expected)); 
    } 

    @After 
    public void tearDown() throws Exception { 
     smtpServer.stop(); 
    } 
} 

はOKです、私はテストに合格し、私はここで

<dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-mail</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.icegreen</groupId> 
      <artifactId>greenmail</artifactId> 
      <version>1.5.0</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <!-- Import dependency management from Spring Boot --> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-dependencies</artifactId> 
       <version>${spring-boot.version}</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

を使用し、依存関係の私MailClient

@Service 
public class MailClient { 

    private JavaMailSender mailSender; 
    private MailContentBuilder mailContentBuilder; 

    @Autowired 
    public MailClient(JavaMailSender mailSender, MailContentBuilder mailContentBuilder) { 
     this.mailSender = mailSender; 
     this.mailContentBuilder = mailContentBuilder; 
    } 

    public void prepareAndSend(String recipient, String message) { 
     MimeMessagePreparator messagePreparator = mimeMessage -> { 
      MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage); 
      messageHelper.setFrom("[email protected]"); 
      messageHelper.setTo("[email protected]"); 
      messageHelper.setSubject("Sample mail subject"); 
      String content = mailContentBuilder.build(message); 
      messageHelper.setText(content, true); 
     }; 
     try { 
      mailSender.send(messagePreparator); 
     } catch (MailException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ですが、私は電子メールを受信しません。

+1

とにかく、私はSpring Bootで電子メールを送信するために、[Email Tools](https://github.com/ozimov/spring-boot-email-tools)というエクステンションに積極的に取り組んでいます。基本機能を再実装することで時間を無駄にせずに開発をスピードアップすることができます。 – JeanValjean

答えて

4

この統合テストでは、ローカルテストのSMTPサーバースタブ - GreenMailが使用されているため、電子メールは届きません。このテストでは実際の電子メールは送信されません。実際のSMTPサーバーが本番環境で使用可能な場合は、メールが準備され正しく送信されているかどうかだけが検証されます。

ローカル環境からメールを送信するには、一部のSMTPサーバーを設定する必要がありますが、メールが実際に送信されるかどうかの自動確認はまったく別の話です。

+0

だから、最後にThymeleafの電子メールテンプレートがどのように見えるのか分かりませんか? –

+0

残念ながら、このテストではありません。各クライアントには独自の制限があるため、メールテンプレートのテストは常に苦労します。ただし、SMTPサーバーをローカルに設定し、このテストを変更してGreenMailの代わりに使用することができます。実際の電子メールが送信されるので、希望のクライアントで手動で確認することができます。 –

+0

ok、ありがとう!と卓越したブログ! –

関連する問題