使用spring 并加载模板发送Email 发邮件 java 模板

以下例子是使用spring发送email,然后加载到固定的模板,挺好的,大家可以试试

需要使用到spring-context 包 和 com.springsource.org.apache.velocity-1.6.2.jar 其他都是常用包,自选,包括commons 系列包

代码如下

 

package asia.wildfire.mail;





import java.io.File;

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;



import javax.mail.internet.MimeMessage;



import org.apache.velocity.app.VelocityEngine;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.mail.javamail.MimeMessagePreparator;

import org.springframework.ui.velocity.VelocityEngineUtils;



/**

 * Created with IntelliJ IDEA.

 * User: liuxiaochen

 * Date: 13-9-22

 * Time: 下午6:50

 * 修改描述

 */

public class ActsocialMailSender {

    //从配置文件中读取相应的邮件配置属性

    private static final String emailHost = "smtp.gmail.com";

    private static final String userName = "****@gmail.com";

    private static final String password = "********";

    private static final String mailAuth = "true";

    private static Map<String, Object> proMap = null;

    private static JavaMailSenderImpl instance = null;

    private static VelocityEngine velocityEngine = null;



    static {

        proMap = new HashMap<String, Object>();

        proMap.put("resource.loader", "class");

        proMap.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");



    }



    public static JavaMailSender getInstance() {

        if (null == instance) {

            synchronized (JavaMailSenderImpl.class) {

                if (null == instance) {

                    instance = new JavaMailSenderImpl();

                    instance.setHost(emailHost);

                    instance.setUsername(userName);

                    instance.setPassword(password);

                    Properties properties = new Properties();

                    properties.setProperty("mail.smtp.auth", mailAuth);

                    //使用gmail发送邮件是必须设置如下参数的 主要是port不一样

                    if (emailHost.indexOf("smtp.gmail.com")>=0) {

                        properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

                        properties.setProperty("mail.smtp.socketFactory.fallback", "false");

                        properties.setProperty("mail.smtp.port", "465");

                        properties.setProperty("mail.smtp.socketFactory.port", "465");

                    }

                    instance.setJavaMailProperties(properties);

                }

            }

        }



        return instance;

    }



    public static VelocityEngine getVelocityEngineInstance() {

        if (null == velocityEngine) {

            synchronized (VelocityEngine.class) {

                if (null == velocityEngine) {

                    velocityEngine = new VelocityEngine();

                    for (Map.Entry<String, Object> entry : proMap.entrySet()) {

                        velocityEngine.setProperty(entry.getKey(), entry.getValue());

                    }

                }

            }

        }

        return velocityEngine;

    }



    public static void sendEmail(final Map<String,Object> model,final String subject,final String vmfile,final String[] mailTo,final String [] files)

    {

        MimeMessagePreparator preparator = new MimeMessagePreparator() {

            //注意MimeMessagePreparator接口只有这一个回调函数

            public void prepare(MimeMessage mimeMessage) throws Exception

            {

                MimeMessageHelper message = new MimeMessageHelper(mimeMessage,true,"GBK");

                //这是一个生成Mime邮件简单工具,如果不使用GBK这个,中文会出现乱码

                //如果您使用的都是英文,那么可以使用MimeMessageHelper message = new MimeMessageHelper(mimeMessage);

                message.setTo(mailTo);//设置接收方的email地址

                message.setSubject(subject);//设置邮件主题

                message.setFrom(userName);//设置发送方地址

                String text = VelocityEngineUtils.mergeTemplateIntoString(

                        ActsocialMailSender.getVelocityEngineInstance(), vmfile, "UTF-8", model);

                //从模板中加载要发送的内容,vmfile就是模板文件的名字

                //注意模板中有中文要加GBK,model中存放的是要替换模板中字段的值

                message.setText(text, true);

                //将发送的内容赋值给MimeMessageHelper,后面的true表示内容解析成html

                //如果您不想解析文本内容,可以使用false或者不添加这项

                FileSystemResource file;

                for(String s:files)//添加附件

                {

                    file = new FileSystemResource(new File(s));//读取附件

                    message.addAttachment(s, file);//向email中添加附件

                }

            }

        };

        ActsocialMailSender.getInstance().send(preparator);//发送邮件

    }

    

    public static void sendAlertEmail(final Map<String,Object> model,final String[] mailTo){

    	sendEmail(model, "", "", mailTo, new String[]{});

    }

}


以上代码就是发送邮件所需要的代码,可以看下

 

测试类

 

public class ActsocialEmailTest {

    public static void main(String[] args) {

        Map<String,Object> model = new HashMap<String,Object>();

        model.put("userName","xiaochen.liu");

        model.put("emailAddress", "[email protected]");

        ActsocialMailSender.sendEmail(model,"欢迎加入", "welcome.vm",new String[]{"****@gmail.com"},new String[]{});



    }

}


模板文件如下

 

welcome.vm

 

<html>

<body>

<h3>您好 $!{userName}, 欢迎您加入actsocial!</h3>



<div>

    您的email地址是<a href="mailto:${emailAddress}">$!{emailAddress}</a>.

    本条信息是系统自动发送,请勿回复!

</div>

</body>



</html>


好了就这么多

 


 

你可能感兴趣的:(spring)