背景:html
前几天有个pm搭建了个邮件服务,让我把发送邮件整合到系统里面。之前用过jmail发送过。因为此次是作的产品,因此对ui要求很高。因此要求邮件发送html。从java里面拼接实在是混乱,也不易修改。因此想到了利用模板来搞定java
jar :jmail 1.4+ struts2+freemaker安全
java:session
<!-- public String forgetPwd() { HttpServletRequest request = ServletActionContext.getRequest(); String email = request.getParameter("email"); Map<String, String> map = new HashMap<String, String>(); try { //templates 里面须要的传人的值 Map<String, String> sendMap = new HashMap<String, String>(); //加载templates 正式环境能够采用预加载方式 String path = "E:\\myEclipse8.6\\fileboxServer\\defaultroot\\WEB-INF\\templates"; sendMap.put("now", DataUtils.date2String(DataUtils.getNow())); sendMap.put("email", email); sendMap.put("href", "http://localhost:8080/html/account/reset_password.html?email=" + email); Jmail.sendMail(email, "找回密码", path, "finfPwd.ftl", sendMap); } catch (Exception e) { this.error = err(map); e.printStackTrace(); return error; } this.result = success(map); return SUCCESS; } -->
jmail :ui
<!-- /** * 使用Freemarker生成html格式内容. */ public static String generateContent(Map<String, String> map, String path, String ftl) throws MessagingException { try { try { Configuration freemarkerConfiguration = new Configuration(); // 能够再初始化selvelt时加载 File f = new File(path); freemarkerConfiguration.setDirectoryForTemplateLoading(f); Template template = freemarkerConfiguration.getTemplate(ftl, "utf-8"); return FreeMarkerTemplateUtils.processTemplateIntoString( template, map); } catch (IOException e) { throw new MessagingException("FreeMarker模板不存在", e); } } catch (TemplateException e) { throw new MessagingException("FreeMarker处理失败", e); } } public static void main(String args[]) { try { String email="test@163.com"; Map<String, String> sendMap = new HashMap<String, String>(); String path = "E:\\myEclipse8.6\\fileboxServer\\defaultroot\\WEB-INF\\templates"; sendMap.put("now", DataUtils.date2String(DataUtils.getNow())); sendMap.put("email", email); sendMap.put("href", "http://localhost:8080/html/account/reset_password.html?email=" + email); Jmail.sendMail(email, "找回密码", path, "finfPwd.ftl", sendMap); } catch (MessagingException e) { e.printStackTrace(); } } /** * @param email * 发送到的email * @param subject * 主题 * @param path * 模板所在的路径 * @param path * 加载的模板 * @param path * 模板要加载的参数 * @throws MessagingException */ @SuppressWarnings("static-access") public static void sendMail(String email, String subject, String path, String template, Map<String, String> map) throws MessagingException { // 第一步:配置javax.mail.Session对象 System.out.println("为smtp.filebox.com.cn 配置mail session对象"); Properties props = new Properties(); props.put("mail.smtp.host", EMAIL_PORT); props.put("mail.smtp.starttls.enable", "true");// 使用 STARTTLS安全链接 // props.put("mail.smtp.port", "25"); //google使用465或587端口 props.put("mail.smtp.auth", "true"); // 使用验证 // props.put("mail.debug", "true"); Session mailSession = Session.getInstance(props,new MyAuthenticator(EMAIL_USRTID,EMAIL_PWD) );
// Session mailSession = Session.getInstance(props);this
// 第二步:编写消息 InternetAddress fromAddress = new InternetAddress(EMAIL_FROM); InternetAddress toAddress = new InternetAddress(email); MimeMessage message = new MimeMessage(mailSession); message.setFrom(fromAddress); message.addRecipient(RecipientType.TO, toAddress); message.setSentDate(Calendar.getInstance().getTime()); message.setSubject(subject); message.setContent(Jmail.generateContent(map, path, template), EMAIL_TYPE); // 第三步:发送消息 Transport transport = mailSession.getTransport("smtp"); //transport.connect("service","service123"); transport.connect(); transport.send(message, message.getRecipients(RecipientType.TO)); System.out.println("message yes"); }
class MyAuthenticator extends Authenticator { String userName = ""; String password = "";debug
public MyAuthenticator() { } public MyAuthenticator(String userName, String password) { this.userName = userName; this.password = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); }
} -->code