本文以用户注册后为用户发送一封邮件为例子,讲述如何在Spring中使用FreeMaker或Vilocity发送邮件。
Spring配置文件:
xml 代码
-
- <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="host" value="smtp.163.com"/>
- <property name="username" value="test"/>
- <property name="password" value="123456"/>
- <property name="javaMailProperties">
- <props>
- <prop key="mail.smtp.auth">trueprop>
- props>
- property>
- bean>
-
-
- <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
- <property name="templateLoaderPath" value="/WEB-INF/freemakertemplate/" />
- <property name="freemarkerSettings">
- <props>
- <prop key="template_update_delay">0prop>
- <prop key="default_encoding">GBKprop>
- <prop key="locale">zh_CNprop>
- props>
- property>
- bean>
-
-
- <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
- <property name="resourceLoaderPath" value="/WEB-INF/vilocitytemplate/" />
- <property name="velocityProperties">
- <props>
- <prop key="velocimacro.library">*.vmprop>
- <prop key="default.contentType">text/html; charset=utf-8prop>
- <prop key="output.encoding">utf-8prop>
- <prop key="input.encoding">utf-8prop>
- props>
- property>
- bean>
-
- <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage" singleton="false">
- <property name="from" value="test@163.com"/>
- bean>
-
- <bean id="mailEngine" class="test.MailEngine">
- <property name="mailSender" ref="mailSender"/>
-
- <property name="velocityEngine" ref="velocityEngine"/>
-
- <property name="freeMarkerConfigurer" ref="freeMarkerConfigurer" />
- bean>
java 代码
- MailEngine类:
-
- public class MailEngine {
- protected static final Log log = LogFactory.getLog(MailEngine.class);
-
-
- private VelocityEngine velocityEngine;
- private MailSender mailSender;
-
-
-
-
-
-
- public void setMailSender(MailSender mailSender) {
- this.mailSender = mailSender;
- }
-
- public void setVelocityEngine(VelocityEngine velocityEngine) {
- this.velocityEngine = velocityEngine;
- }
-
-
-
-
-
-
-
- public String generateEmailContent(String templateName, Map map) {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- try {
- return VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateName, map);
- } catch (VelocityException e) {
- log.error("Error while processing Vilocity template ", e);
- }
-
- return null;
- }
-
-
-
-
-
-
-
-
-
-
-
- public void sendMessage(String[] emailAddresses, String fromEmail,
- String bodyText, String subject, String attachmentName,
- ClassPathResource resource) throws MessagingException {
- MimeMessage message = ((JavaMailSenderImpl) mailSender)
- .createMimeMessage();
-
-
- MimeMessageHelper helper = new MimeMessageHelper(message, true);
-
- helper.setTo(emailAddresses);
- if(fromEmail != null){
- helper.setFrom(fromEmail);
- }
- helper.setText(bodyText, true);
- helper.setSubject(subject);
-
- if(attachmentName!=null && resource!=null)
- helper.addAttachment(attachmentName, resource);
-
- ((JavaMailSenderImpl) mailSender).send(message);
- }
-
-
-
-
-
- public void send(SimpleMailMessage msg) {
- try {
- ((JavaMailSenderImpl) mailSender).send(msg);
- } catch (MailException ex) {
-
- log.error(ex.getMessage());
- }
- }
-
-
-
-
-
-
-
-
- public void send(SimpleMailMessage msg, String templateName, Map model) {
-
- String content = generateEmailContent(templateName, model);
- MimeMessage mimeMsg = null;
- try {
- mimeMsg = ((JavaMailSenderImpl) mailSender).createMimeMessage();
- MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, true, "utf-8");
- helper.setTo(msg.getTo());
-
- if(msg.getSubject()!=null)
- helper.setSubject(msg.getSubject());
-
- if(msg.getFrom()!=null)
- helper.setFrom(msg.getFrom());
-
- helper.setText(content, true);
-
- ((JavaMailSenderImpl) mailSender).send(mimeMsg);
- } catch (MessagingException ex) {
- log.error(ex.getMessage(), ex);
- }
-
- }
- }
-
- 发送邮件:
- SimpleMailMessage message = (SimpleMailMessage) getBean("mailMessage");
- message.setTo(user.getName() + "<" + user.getEmail() + ">");
-
- Map model = new HashMap();
- model.put("user", user);
-
- MailEngine engine = (MailEngine)getBean("mailEngine");
-
- engine.send(message, "notifyUser.vm", model);
-
-
-
- 以上的User为用户类。
xml 代码
- 模板:
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <title>用户注册通知title>
- head>
- <body>
- <p>${user.name} 您好,恭喜您,已经成为本站会员!p>
- <table>
- <tr><td>用户名:td><td>${user.name}td>tr>
- <tr><td>密码:td><td>${user.password}td>tr>
- table>
- body>
- html>
|