zoukankan      html  css  js  c++  java
  • 使用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", "xiaochen.liu@xingxinghuo.com");
            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>


    好了就这么多


  • 相关阅读:
    几大NB IT公司的Orgnizational Chart
    [Buzz.Today]2012.01.19
    ASP.NET常用的三十三种实用代码
    asp.net UrlRewrite 技术的实现
    AJAX 中,让 UpdateProgress 中的内容显示在页面正中央
    AJAX中关于多个UpdatePanel 的 UpdateProgress 的使用方法
    谈谈 Cookie 存取和IE页面缓存的问题
    一个非常实用的 div+css 实现的导航条
    常用 css 示例
    AJAX 带有 取消功能的 UpdateProgress
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3339436.html
Copyright © 2011-2022 走看看