所谓集成Velocity发送邮件,最关键的部分就把原来写在配置文件的邮件体用vm模板改写,用hashmap的方式填充vm模板,构造成邮件体 package ch15.VelocityMail;import java.util.Map;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import org.apache.velocity.app.VelocityEngine;import org.springframework.mail.javamail.MimeMessagePreparator;import org.springframework.ui.velocity.VelocityEngineUtils;public class MessagePreparator implements MimeMessagePreparator ...{ private String to; private String from; private String htmlContent; private String textContent; private String subject; private VelocityEngine velocityEngine; private Map data; public String getHtmlContent() ...{ return htmlContent; } public void setHtmlContent(String htmlContent) ...{ this.htmlContent = htmlContent; } public String getTextContent() ...{ return textContent; } public void setTextContent(String textContent) ...{ this.textContent = textContent; } public Map getData() ...{ return data; } public void setData(Map data) ...{ this.data = data; } public VelocityEngine getVelocityEngine() ...{ return velocityEngine; } public void setVelocityEngine(VelocityEngine velocityEngine) ...{ this.velocityEngine = velocityEngine; } public String getSubject() ...{ return subject; } public void setSubject(String subject) ...{ this.subject = subject; } public String getTo() ...{ return to; } public void setTo(String to) ...{ this.to = to; } public String getFrom() ...{ return from; } public void setFrom(String from) ...{ this.from = from; } public void prepare(MimeMessage msg) throws Exception ...{ //设置邮件信息 msg.addFrom(InternetAddress.parse(from)); msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); msg.setSubject(subject); //创建multipart/alternative的包装器 MimeMultipart mimeMultipart=new MimeMultipart(); msg.setContent(mimeMultipart); //创建text的邮件体 BodyPart plainText=new MimeBodyPart(); plainText.setText(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, textContent, data)); mimeMultipart.addBodyPart(plainText); //创建html的邮件体 BodyPart htmlText=new MimeBodyPart(); htmlText.setContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, htmlContent, data),"text/html"); mimeMultipart.addBodyPart(htmlText); } } package ch15.VelocityMail;import java.util.HashMap;import java.util.Map;import org.springframework.mail.javamail.JavaMailSenderImpl;public class MessageSender ...{ protected JavaMailSenderImpl sender; public void sendMessage(MessagePreparator msg)...{ Map data=new HashMap(); data.put("htmlmsg", "hello world html");//htmlmsg为vm文件中的变量 data.put("textmsg", "hello world text");//textmsg为vm文件中的变量 msg.setData(data); sender.send(msg); } public JavaMailSenderImpl getSender() ...{ return sender; } public void setSender(JavaMailSenderImpl sender) ...{ this.sender = sender; } } <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><bean id="messageSender" class="ch15.VelocityMail.MessageSender"> <property name="sender"> <ref bean="sender"/> </property></bean><bean id="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <value>king.cn</value> </property> <property name="username"> <value>gaoxiang</value> </property> <property name="password"> <value>gaoxiang</value> </property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.timeout">10000</prop> </props> </property></bean><bean id="messagePreparator" class="ch15.VelocityMail.MessagePreparator"> <property name="to"> <value>yulihua2020@126.com</value> </property> <property name="from"> <value>gaoxiang@king.cn</value> </property> <property name="subject"> <value>html/text mime mail</value> </property> <property name="htmlContent"> <value>./src/ch15/VelocityMail/html.vm</value> </property> <property name="textContent"> <value>./src/ch15/VelocityMail/text.vm</value> </property> <property name="velocityEngine"> <bean class="org.springframework.ui.velocity.VelocityEngineFactoryBean"/> </property></bean></beans> html.VM this is html message: $htmlmsg text.vm this is text message: $textmsg 测试代码: package ch15.VelocityMail;import java.io.File;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class VelocityMailTest ...{ public static void main(String[] args) throws Exception ...{ ApplicationContext context = new ClassPathXmlApplicationContext( "ch15/VelocityMail/applicationContext.xml"); MessagePreparator messagePreparator = (MessagePreparator) context.getBean("messagePreparator"); MessageSender messageSender=(MessageSender)context.getBean("messageSender"); for (int i = 0; i < 10; i++) ...{ messageSender.sendMessage(messagePreparator); System.out.println("成功"); Thread.sleep(2000); //发送后延时2秒钟 } }}