使用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 并加载模板发送Email 发邮件 java 模板)