FreeMarkerメールテンプレートを使用してメールを送信
10575 ワード
SpringはFreeMarkerにFreeMarkerConfigurerクラスを提供し、このようなFreeMarkerを容易に作成できる基礎環境を通じて、SpringはFreeMarkerTemplateUtilsツールクラスを提供してテンプレートを解析するタスクを完了します.
次に、ユーザ登録に成功する送信テンプレートファイルregisterUserを示す.ftl、このファイルをsrc/mailTemplateの下に置きます.
6.1テンプレートファイル
上の${username}ラベルは、置換可能なダイナミックプロパティを表します.FreeMarkerテンプレートのラベルは、${user.Id}のように、userオブジェクトのId属性を表すカスケード属性をサポートします.
6.2 FreeMarkerテンプレート技術によるメールコンテンツの構築
6.3 applicationContext.xmlプロファイル
プロファイルにテンプレートディレクトリが設定されているため、クラス内でテンプレートファイル名でテンプレートファイルを直接配置できます.テンプレートファイルはUTF-8符号化フォーマットで、中国語の文字化けしないようにします.templateを設定するupdate_delayプロパティでは、FreeMarkerが定期的にテンプレートをリフレッシュし、アプリケーションが再起動せずにテンプレートを更新できるようにします.
これで、TemplateEmailServiceクラスを実行してメールを送信することができ、「yefriend」が${username}を置換することを実験で示します.
以上のソース:http://yefriendly.iteye.com/blog/404358
以下は、独自の拡張機能です.
実際のプロジェクトでは、データ・ソースとテンプレートを動的に指定するには、次のようにして取得方法を構築する必要があります.
これにより、次のようにデータを取得できます.
送信者が固定されている場合は、TemplateEmailServiceにorgを継承することもできます.springframework.mail.SimpleMailMessageクラスは、Fromまたはtoプロパティを使用します.
マイクラス:
次の操作を行います.
xml構成:
...
添付ファイル付きメールを送信:
送信に成功したら使用可能
ファイルを削除!
参照:http://freeman983.iteye.com/blog/208586
または、
...
詳細参照:http://hi.baidu.com/sleep651/blog/item/90cbcd4635af6b046b63e5a4.html
次に、ユーザ登録に成功する送信テンプレートファイルregisterUserを示す.ftl、このファイルをsrc/mailTemplateの下に置きます.
6.1テンプレートファイル
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf8">
</head>
<body>
! :<font color='red' size='30'>${username}</font>
</body>
</html>
上の${username}ラベルは、置換可能なダイナミックプロパティを表します.FreeMarkerテンプレートのラベルは、${user.Id}のように、userオブジェクトのId属性を表すカスケード属性をサポートします.
6.2 FreeMarkerテンプレート技術によるメールコンテンツの構築
package com.bb.spring.email;
import org.springframework.ui.freemarker.*;
import org.springframework.web.servlet.view.freemarker.*;
import freemarker.template.*;
import ......
public class TemplateEmailService {
private JavaMailSender sender;
private FreeMarkerConfigurer freeMarkerConfigurer=null;//FreeMarker
public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
this.freeMarkerConfigurer = freeMarkerConfigurer;
}
public void setSender(JavaMailSender sender) {
this.sender = sender;
}
// , username ${username} 。
private String getMailText(String username){
String htmlText="";
try {
// FreeMarker
Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("registerUser.ftl");
//FreeMarker Map
Map map=new HashMap();
map.put("username",username); // key
// , username ${username} 。
htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return htmlText;
}
//
public void sendTemplateMail(String username) throws MessagingException{
MimeMessage msg=sender.createMimeMessage();
MimeMessageHelper helper=new MimeMessageHelper(msg,false,"utf8");// html , mulitpart
helper.setFrom("[email protected]");
helper.setTo("[email protected]");
helper.setSubject(" - ");
String htmlText=getMailText(username);// html
helper.setText(htmlText, true);
sender.send(msg);
System.out.println(" ");
}
public static void main(String[] args) throws MessagingException {
// TODO Auto-generated method stub
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"src/applicationContext.xml");
TemplateEmailService ms=(TemplateEmailService) ctx.getBean("templateEmail");
//
ms.sendTemplateMail("yefriend");
}//end method
}
6.3 applicationContext.xmlプロファイル
<bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="classpath:mailTemplate"/><!-- -->
<property name="freemarkerSettings"><!-- FreeMarker -->
<props>
<prop key="template_update_delay">1800</prop><!-- , -->
<prop key="default_encoding">UTF-8</prop><!-- -->
<prop key="locale">zh_CN</prop><!-- -->
</props>
</property>
</bean>
<bean id="templateEmail" class="com.bb.spring.email.TemplateEmailService">
<property name="sender" ref="mailsender"></property>
<property name="freeMarkerConfigurer" ref="freeMarker"></property>
</bean>
プロファイルにテンプレートディレクトリが設定されているため、クラス内でテンプレートファイル名でテンプレートファイルを直接配置できます.テンプレートファイルはUTF-8符号化フォーマットで、中国語の文字化けしないようにします.templateを設定するupdate_delayプロパティでは、FreeMarkerが定期的にテンプレートをリフレッシュし、アプリケーションが再起動せずにテンプレートを更新できるようにします.
これで、TemplateEmailServiceクラスを実行してメールを送信することができ、「yefriend」が${username}を置換することを実験で示します.
以上のソース:http://yefriendly.iteye.com/blog/404358
以下は、独自の拡張機能です.
実際のプロジェクトでは、データ・ソースとテンプレートを動的に指定するには、次のようにして取得方法を構築する必要があります.
public String getMailHtml(Map map, String templateName) {
String htmlText = null;
try {
Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);
htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
return htmlText;
}
これにより、次のようにデータを取得できます.
Map<String,Object> map = amendEmailUtils.initAmendPendingEmailMap(hotelbookheader...);
String html = mailSender.getMailHtml(map, "amendmentPending.ftl");
送信者が固定されている場合は、TemplateEmailServiceにorgを継承することもできます.springframework.mail.SimpleMailMessageクラスは、Fromまたはtoプロパティを使用します.
マイクラス:
public class SimpleMailSender extends SimpleMailMessage {
private JavaMailSender sender;
private MimeMessageHelper messageHellper;
private FreeMarkerConfigurer freeMarkerConfigurer;
次の操作を行います.
//
public SimpleMailSender mailSender;
//
Map<String,Object> map = amendEmailUtils.initAmendPendingEmailMap(hotelbookheader...);
String html = mailSender.getMailHtml(map, "amendmentPending.ftl");
MimeMessage mimeMessage = mailSender.GetSender().createMimeMessage();
MimeMessageHelper messageHellper = new MimeMessageHelper(mimeMessage, true, "utf-8");
messageHellper.setSubject(amendSubjectToUser);
messageHellper.setFrom(mailSender.getFrom());
// , SimpleMailSender from、to ,
xml構成:
<bean id="mailSender"
class="com.techson.himsnanhwa.admin.mail.SimpleMailSender">
<property name="javaMailSender"><ref bean="sender"/></property>
<property name="freeMarkerConfigurer" ref="freeMarker"></property>
<property name="from">
<value>[email protected]</value>
</property>
<property name="to">
<value>[email protected]</value>
</property>
</bean>
<!-- -->
<bean id="freeMarker" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/mailTemplete"/>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">15</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="locale">zh_CN</prop>
</props>
</property>
</bean>
<bean id="sender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>192.168.108.6</value>
</property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<property name="username">
<value>wy</value>
</property>
<property name="password">
<value>wy</value>
</property>
</bean>
...
添付ファイル付きメールを送信:
MimeMessage message = mailSender.GetSender().createMimeMessage();
MimeMessageHelper messageHellper = new MimeMessageHelper(message, true, "utf-8");
messageHellper.setSubject(subject);
messageHellper.setFrom(formMap.get("couemail") + "");
messageHellper.setFrom(sender);
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
File file = new File("E:\\hotel_" + filename + ".xls");
FileDataSource fds=new FileDataSource(file);
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
message.setContent(mp);
message.saveChanges();
送信に成功したら使用可能
fds.getFile().delete();
ファイルを削除!
参照:http://freeman983.iteye.com/blog/208586
または、
String path = ServletActionContext.getServletContext().getRealPath("/download/");
String destinct = path + "/" + fileName + ".zip";
Resource file = new ServletContextResource(ServletActionContext.getServletContext(),destinct);
helper.addAttachment("hotel_nh_"+countryCode + ".zip", file.getFile());
:
message.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf"));
...
詳細参照:http://hi.baidu.com/sleep651/blog/item/90cbcd4635af6b046b63e5a4.html