zoukankan      html  css  js  c++  java
  • 发送邮件的工具类

    如下:

    package com.thinkgem.jeesite.common.utils;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import org.apache.commons.mail.HtmlEmail;
    import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
    
    import java.io.File;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 发送电子邮件
     */
    public class SendMailUtil {
    
        private static final String fromName = "管理员";
        private static final String charSet = "utf-8";
        // TODO 邮箱和密码要改,如果邮箱不是下面列出的域名的还需要手动加域名和端口
        private static final String from = "xxx@qq.com";//发件人
        private static final String username = "xxx@qq.com";//发件人账户名
        private static final String password = "xxx";//发件人密码
    
        private static Map<String, String> hostMap = new HashMap<String, String>();
        static {
            // 126
            hostMap.put("smtp.126", "smtp.126.com");
            // qq
            hostMap.put("smtp.qq", "smtp.qq.com");
    
            // 163
            hostMap.put("smtp.163", "smtp.163.com");
    
            // sina
            hostMap.put("smtp.sina", "smtp.sina.com.cn");
    
            // tom
            hostMap.put("smtp.tom", "smtp.tom.com");
    
            // 263
            hostMap.put("smtp.263", "smtp.263.net");
    
            // yahoo
            hostMap.put("smtp.yahoo", "smtp.mail.yahoo.com");
    
            // hotmail
            hostMap.put("smtp.hotmail", "smtp.live.com");
    
            // gmail
            hostMap.put("smtp.gmail", "smtp.gmail.com");
            hostMap.put("smtp.port.gmail", "465");
    
            hostMap.put("xxx", "smtp.exmail.qq.com");
            hostMap.put("xxx", "465");
        }
    
        public static String getHost(String email) throws Exception {
            Pattern pattern = Pattern.compile("\w+@(\w+)(\.\w+){1,2}");
            Matcher matcher = pattern.matcher(email);
            String key = "unSupportEmail";
            if (matcher.find()) {
                key = "smtp." + matcher.group(1);
            }
            if (hostMap.containsKey(key)) {
                return hostMap.get(key);
            } else {
                throw new Exception("unSupportEmail");
            }
        }
    
        public static int getSmtpPort(String email) throws Exception {
            Pattern pattern = Pattern.compile("\w+@(\w+)(\.\w+){1,2}");
            Matcher matcher = pattern.matcher(email);
            String key = "unSupportEmail";
            if (matcher.find()) {
                key = "smtp.port." + matcher.group(1);
            }
            if (hostMap.containsKey(key)) {
                return Integer.parseInt(hostMap.get(key));
            } else {
                return 25;
            }
        }
    
        /**
         * 发送模板邮件
         * 
         * @param toMailAddr
         *            收信人地址
         * @param subject
         *            email主题
         * @param templatePath
         *            模板地址
         * @param map
         *            模板map
         */
        public static void sendFtlMail(String toMailAddr, String subject,
                String templatePath, Map<String, Object> map) {
            Template template = null;
            Configuration freeMarkerConfig = null;
            HtmlEmail hemail = new HtmlEmail();
            try {
                hemail.setHostName(getHost(from));
                hemail.setSmtpPort(getSmtpPort(from));
                hemail.setCharset(charSet);
                hemail.addTo(toMailAddr);
                hemail.setFrom(from, fromName);
                hemail.setAuthentication(username, password);
                hemail.setSubject(subject);
                freeMarkerConfig = new Configuration();
                freeMarkerConfig.setDirectoryForTemplateLoading(new File(
                        getFilePath()));
                // 获取模板
                template = freeMarkerConfig.getTemplate(getFileName(templatePath),
                        new Locale("Zh_cn"), "UTF-8");
                // 模板内容转换为string
                String htmlText = FreeMarkerTemplateUtils
                        .processTemplateIntoString(template, map);
                System.out.println(htmlText);
                hemail.setMsg(htmlText);
                hemail.send();
                System.out.println("email send true!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("email send error!");
            }
        }
    
        /**
         * 发送普通邮件
         * 
         * @param toMailAddr
         *            收信人地址
         * @param ccList
         *            抄送列表,多个邮件地址用分号分隔
         * @param subject
         *            email主题
         * @param message
         *            发送email信息
         */
        public static void sendCommonMail(String toMailAddr, String ccList, String subject,
                String message) {
            HtmlEmail hemail = new HtmlEmail();
            try {
                hemail.setHostName(getHost(from));
                int port = getSmtpPort(from);
                if(465 == port){
                    hemail.setSSLOnConnect(true);
                    hemail.setSslSmtpPort("465");
                }else{
                    hemail.setSmtpPort(getSmtpPort(from));
                }
                hemail.setCharset(charSet);
                hemail.addTo(toMailAddr);
                if(StringUtils.isNotBlank(ccList)){
                    String[] ccLists = ccList.split(";");
                    for(String s:ccLists){
                        hemail.addCc(s);
                    }
                }
                hemail.setFrom(from, fromName);
                hemail.setAuthentication(username, password);
                hemail.setSubject(subject);
                hemail.setMsg(message);
                hemail.send();
                System.out.println("email send true!");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("email send error!");
            }
    
        }
    
        /**
         * 发送普通邮件
         *
         * @param toMailAddr
         *            收信人地址
         * @param subject
         *            email主题
         * @param message
         *            发送email信息
         */
        public static void sendCommonMail(String toMailAddr, String subject,
                                          String message) {
            sendCommonMail(toMailAddr, "", subject, message);
        }
    
        public static String getHtmlText(String templatePath,
                Map<String, Object> map) {
            Template template = null;
            String htmlText = "";
            try {
                Configuration freeMarkerConfig = null;
                freeMarkerConfig = new Configuration();
                freeMarkerConfig.setDirectoryForTemplateLoading(new File(
                        getFilePath()));
                // 获取模板
                template = freeMarkerConfig.getTemplate(getFileName(templatePath),
                        new Locale("Zh_cn"), "UTF-8");
                // 模板内容转换为string
                htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(
                        template, map);
                System.out.println(htmlText);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return htmlText;
        }
    
        private static String getFilePath() {
            String path = getAppPath(SendMailUtil.class);
            path = path + File.separator + "mailtemplate" + File.separator;
            path = path.replace("\", "/");
            System.out.println(path);
            return path;
        }
    
        private static String getFileName(String path) {
            path = path.replace("\", "/");
            System.out.println(path);
            return path.substring(path.lastIndexOf("/") + 1);
        }
    
    //    @SuppressWarnings("unchecked")
        public static String getAppPath(Class<?> cls) {
            // 检查用户传入的参数是否为空
            if (cls == null)
                throw new java.lang.IllegalArgumentException("参数不能为空!");
            ClassLoader loader = cls.getClassLoader();
            // 获得类的全名,包括包名
            String clsName = cls.getName() + ".class";
            // 获得传入参数所在的包
            Package pack = cls.getPackage();
            String path = "";
            // 如果不是匿名包,将包名转化为路径
            if (pack != null) {
                String packName = pack.getName();
                // 此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库
                if (packName.startsWith("java.") || packName.startsWith("javax."))
                    throw new java.lang.IllegalArgumentException("不要传送系统类!");
                // 在类的名称中,去掉包名的部分,获得类的文件名
                clsName = clsName.substring(packName.length() + 1);
                // 判定包名是否是简单包名,如果是,则直接将包名转换为路径,
                if (packName.indexOf(".") < 0)
                    path = packName + "/";
                else {// 否则按照包名的组成部分,将包名转换为路径
                    int start = 0, end = 0;
                    end = packName.indexOf(".");
                    while (end != -1) {
                        path = path + packName.substring(start, end) + "/";
                        start = end + 1;
                        end = packName.indexOf(".", start);
                    }
                    path = path + packName.substring(start) + "/";
                }
            }
            // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名
            java.net.URL url = loader.getResource(path + clsName);
            // 从URL对象中获取路径信息
            String realPath = url.getPath();
            // 去掉路径信息中的协议名"file:"
            int pos = realPath.indexOf("file:");
            if (pos > -1)
                realPath = realPath.substring(pos + 5);
            // 去掉路径信息最后包含类文件信息的部分,得到类所在的路径
            pos = realPath.indexOf(path + clsName);
            realPath = realPath.substring(0, pos - 1);
            // 如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名
            if (realPath.endsWith("!"))
                realPath = realPath.substring(0, realPath.lastIndexOf("/"));
            /*------------------------------------------------------------ 
             ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 
              中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 
              的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 
              中文及空格路径 
            -------------------------------------------------------------*/
            try {
                realPath = java.net.URLDecoder.decode(realPath, "utf-8");
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            System.out.println("realPath----->" + realPath);
            return realPath;
        }
    
        // private static File getFile(String path){
        // File file =
        // SendMail.class.getClassLoader().getResource("mailtemplate/test.ftl").getFile();
        // return file;
        // }
        //
    
        public static void main(String[] args) {
            // HtmlEmail hemail = new HtmlEmail();
            // try {
            // hemail.setHostName("smtp.exmail.qq.com");
            // hemail.setCharset("utf-8");
            // hemail.addTo("fly.1206@qq.com");
            // hemail.setFrom("zhoujunfeng@et-bank.com", "周俊峰");
            // hemail.setAuthentication("zhoujunfeng@et-bank.com", "31415926@aa");
            // hemail.setSubject("sendemail test!");
            // hemail.setMsg("<a href="http://www.google.cn">谷歌</a><br/>");
            // hemail.send();
            // System.out.println("email send true!");
            // } catch (Exception e) {
            // e.printStackTrace();
            // System.out.println("email send error!");
            // }
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("subject", "测试标题");
            map.put("content", "测试 内容");
            String templatePath = "mailtemplate/test.ftl";
            sendFtlMail("test@163.com", "sendemail test!", templatePath, map);
    
            // System.out.println(getFileName("mailtemplate/test.ftl"));
        }
    
    }

    调用方法:

    SendMailUtil.sendCommonMail("xxx.qq.com", "", "XXX异常", e.getMessage());
  • 相关阅读:
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    flowable 获取当前任务流程图片的输入流
    最新 接口api插件 Swagger3 更新配置详解
    springboot 集成 activiti 流程引擎
    java 在线考试系统源码 springboot 在线教育 视频直播功能 支持手机端
    阿里 Nacos 注册中心 配置启动说明
    springboot 集成外部tomcat war包部署方式
    java 监听 redis 过期事件
    springcloudalibaba 组件版本关系
    java WebSocket 即时通讯配置使用说明
  • 原文地址:https://www.cnblogs.com/xh_Blog/p/14869727.html
Copyright © 2011-2022 走看看