通过前面的示例,所有邮件的内容都是现实定义的,并通过message.setText("XXXX")来设置的,如果要改变内容的格式就需要手动的写HTML代码,不易于维护,使用模板可以将业务逻辑和页面分开,易于页面的维护
一、Velocity模版:
定义实现类:
package com.mail.sender; import com.mail.service.OrderManager; import org.apache.velocity.app.VelocityEngine; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import org.springframework.ui.velocity.VelocityEngineUtils; import javax.activation.MailcapCommandMap; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.File; import java.util.HashMap; import java.util.Map; /** * Created by IntelliJ IDEA. * User: Administrator * Date: 12-6-13 * Time: 下午2:57 * To change this template use File | Settings | File Templates. */ public class SimpleVelocity implements OrderManager{ private JavaMailSender javaMailSender; private VelocityEngine velocityEngine ; public void setJavaMailSender(JavaMailSender javaMailSender) { this.javaMailSender = javaMailSender; } public void setVelocityEngine(VelocityEngine velocityEngine){ this.velocityEngine = velocityEngine ; } private void senderEmail(){ } public void placeOrder() throws MessagingException { MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws MessagingException { MimeMessageHelper message = new MimeMessageHelper(mimeMessage); message.setTo(" [email protected]"); message.setFrom("[email protected]"); Map model = new HashMap() ; model.put("see","Welocoming"); String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine,"/mail.vm",model); message.setText(text,true); } }; this.javaMailSender.send(preparator); } }
编写配置文件:
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> <property name="velocityProperties"> <props> <prop key="resource.loader">class</prop> <prop key="class.resource.loader.class"> org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader </prop> </props> </property> </bean> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.qq.com"/> <property name="defaultEncoding" value="UTF-8"/> <property name="username" value="[email protected]"/> <property name="password" value="XXXX"/> <property name="javaMailProperties"> <value> mail.smtp.auth=true </value> </property> </bean> <bean id="simpleVelocity" class="com.mail.sender.SimpleVelocity"> <property name="javaMailSender" ref="mailSender"/> <property name="velocityEngine" ref="velocityEngine"/> </bean>
接下来写模版:
<html> <body> ${see} </body> </html>
测试一下看效果: