2016-06-29 14 views
1

を送信します。ここでは問題解決するために私を助けてくださいFreeMarkerのテンプレートメールに

 @Service 
public class MailSenderServiceImpl implements MailSenderService { 
    private static final Logger logger = LoggerFactory.getLogger(MailSenderServiceImpl.class); 
    @Autowired 
    private JavaMailSender javaMailSender; 
    @Autowired 
    Configuration freemarkerConfiguration; 
@Override 
    public void sendTemplatedEmail(String to, String from, String template, Map<String, Object> templatedMimeMessage) 
      throws IOException { 
     FileTemplateLoader templateLoader = new FileTemplateLoader(new File("src/main/resources")); 
     freemarkerConfiguration.setTemplateLoader(templateLoader); 
     MimeMessagePreparator preparator; 
     try { 
      preparator = new MimeMessagePreparator() { 

       // Generate a string from the template 
       String messageText = FreeMarkerTemplateUtils.processTemplateIntoString(
         freemarkerConfiguration.getTemplate(template), templatedMimeMessage); 

       @Override 
       public void prepare(MimeMessage message) throws Exception { 
        MimeMessageHelper helper = new MimeMessageHelper(message, true); 
        helper.setTo(to); 
        helper.setFrom(from); 
        helper.setText(messageText, true); 
       } 
      }; 
      Assert.notNull(javaMailSender, "javaMailSender must not be null"); 
      this.javaMailSender.send(preparator); 

     } catch (Exception ex) { 
      logger.error("Failed to send email for templated message:" + 
         "\nFrom:" + from + 
         "\nTo:" + to + 
         "\nMessageMap:" + templatedMimeMessage, ex); 

     } 

    } } 

を統合テストである:私のテストに合格していません

` @Test 
    public void sendTemplatedEmail() throws IOException { 

     EmailTemplate template = createEmailTemplateObj("Test subject 111111", "Test body 11111111", 
       TemplateType.TENANT_CREATION); 

     // Send message using Free Marker template 
     Map<String, Object> freeMarkderTemplateMap = new HashMap<String, Object>(); 
     freeMarkderTemplateMap.put("subject", template.getSubject()); 
     freeMarkderTemplateMap.put("body", template.getBody()); 

     mailSenderService.sendTemplatedEmail("[email protected]", "[email protected]", 
       "email.ftl", freeMarkderTemplateMap); 
    }` 

、私はテンプレート「email.ftlを取得"見つからない例外が、src/main/resourcesの下に存在します。私は追加されていません

<bean id="freeMarkerConfiguration" class="freemarker.template.Configuration" factory-bean="freeMarkerConfigurationFactory" factory-method="createConfiguration" scope="prototype"/> 

をspring.xmlに追加しました。それが理由ではないと仮定してください。

答えて

2

"src"ディレクトリは、実行中のアプリケーション用ではなく、開発ツール用であるため、ソースコードに "src"を含めないでください。また、ここではFilesを読み込みませんが、クラスローダーリソースはClassTemplateLoaderを使用し、相対的にはsrc/main/resourcesに指定してください。したがって、あなたの場合はnew ClassTemplateLoader(SomeClass.class, "/")になりますが、src/main/resources/com/example/myproject/templatesのようなサブディレクトリを作成する方がいいです。その場合、引数は"/com/example/myproject/templates"になります。

もう1つのこと... freemarkerConfigurationは、sendTemplatedEmailで変更しないでください。他のシングルトンBeanと同様に、アプリケーション起動時に完全に構​​成する必要があります。

関連する問題