spring+velocity自动发送邮件


1.下载spring及velocity类库,

email配置文件:mail.properties:
mail.default.from=jfishsz@163.com
mail.host=smtp.163.com
mail.username=xxxxxx
mail.password=xxxxxx
mail.smtp.auth=true
mail.smtp.timeout=25000

spring配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <!-- For mail settings and future properties files -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
              <list>
                  <value>classpath:mail.properties</value>
              </list>
        </property>
    </bean>
    <bean id="mailSender"
        class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host">
              <value>${mail.host}</value>
        </property>
        <property name="username">
              <value>${mail.username}</value>
        </property>
        <property name="password">
              <value>${mail.password}</value>
        </property>
        <property name="javaMailProperties">
              <props>
                  <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                  <prop key="mail.smtp.timeout">
                      ${mail.smtp.timeout}
                  </prop>
              </props>
        </property>
    </bean>
    <bean id="mailMessage"
        class="org.springframework.mail.SimpleMailMessage"
        singleton="false">
        <property name="from">
              <value>${mail.default.from}</value>
        </property>
       
    </bean>
    <bean id="sendMail" class="net.pms.email.SendMail">
        <property name="mailSender" ref="mailSender" />
        <property name="message" ref="mailMessage" />
        <property name="velocityEngine" ref="velocityEngine" />
    </bean>
    <!-- Configure Velocity for sending e-mail -->
    <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>
                  <prop key="velocimacro.library"></prop>
              </props>
        </property>
    </bean>
</beans>
velocity模板文件:accountCreated.vm:
${message}

Username: ${username}
Password: ${Password}

Login at: ${applicationURL}

2.实现类
SendMail.java
package net.pms.email;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.VelocityException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.ui.velocity.VelocityEngineUtils;

public class SendMail {
    protected static final Log log = LogFactory.getLog(SendMail.class);

    private MailSender mailSender;

    private SimpleMailMessage message;

    private VelocityEngine velocityEngine;

    public void setVelocityEngine(VelocityEngine velocityEngine) {
        this.velocityEngine = velocityEngine;
    }

    public void setMailSender(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void setMessage(SimpleMailMessage message) {
        this.message = message;
    }

    public void sendEmail(Map model) {
        message.setTo("jfishsz@163.com");
        message.setSubject("subject");
        String result = null;
        try {
              result = VelocityEngineUtils.mergeTemplateIntoString(
                      velocityEngine, "accountCreated.vm", model);
        } catch (VelocityException e) {
              e.printStackTrace();
        }
        message.setText(result);
        mailSender.send(message);
    }
}
测试类:SendMailTest.java
package net.pms.email;

import java.util.HashMap;
import java.util.Map;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SendMailTest extends TestCase {
    String[] paths = { "config/applicationContext*.xml" };

    ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);

    SendMail s = (SendMail) ctx.getBean("sendMail");

    protected void setUp() throws Exception {
        super.setUp();
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    /*
    * Test method for 'net.pms.email.SendMail.sendEmail(Map)'
    */
    public void testSendEmail() {
        Map model = new HashMap();
        model.put("message", "msg");
        model.put("username", "jack");
        model.put("Password", "666666");
        model.put("applicationURL", "www.163.com");
        s.sendEmail(model);
    }

}
这只是一个简单的实现介绍,我想通过这个例子进入通往javamail的大门。
原文:http://jfish.blog.ccidnet.com/blog/ccid/do_showone/tid_18513.html