你的位置:首页 > Java教程

[Java教程]java HtmlEmail发送邮件工具类


package com.sh.xrsite.common.utils;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;import org.apache.commons.mail.HtmlEmail;import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;import freemarker.template.Configuration;import freemarker.template.Template;/** * 发送电子邮件 */public class SendMailUtil {  // private static final String smtphost = "192.168.1.70";  private static final String from = "test@163.com";  private static final String fromName = "测试公司";  private static final String charSet = "utf-8";  private static final String username = "home@163.com";  private static final String password = "123456";  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");  }  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 subject   *      email主题   * @param message   *      发送email信息   */  public static void sendCommonMail(String toMailAddr, String subject,      String message) {    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);      hemail.setMsg(message);      hemail.send();      System.out.println("email send true!");    } catch (Exception e) {      e.printStackTrace();      System.out.println("email send error!");    }  }  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.163.com");     hemail.setCharset("utf-8");     hemail.addTo("收件邮箱地址");     hemail.setFrom("发件邮箱地铁", "网易");     hemail.setAuthentication("wang_yi@163.com", "发件邮箱密码");     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"));  }}