首先引入相关依赖
org.springframework.boot spring-boot-starter-mail org.springframework.boot spring-boot-starter-freemarker junit junit //
mail: fromMail: #addr: [email protected] addr: [email protected] spring: http: encoding: force: true charset: UTF-8 enabled: true mail: host: smtp.163.com username: [email protected] password: #这里填写你邮箱的认证密码,不是邮箱密码,具体如何认证请自行百度。 properties: mail.smtp.auth: true mail.smtp.port: 25 mail.smtp.starttls.enable: true mail.smtp.starttls.required: true
file: #这里设置模板的读取路径,一般放在工程文件外面,这样每次修改模板的时候,就不需要重新部署了。 template: d:\template\
@Configuration//设置freeMarker 配置文件 public class FreeMarkerConfig { @Value("${file.template}")//在配置文件中 配置模板的读取路径。 private String templatePath; @Bean public FreeMarkerConfigurer freeMarkerConfigurer(){ FreeMarkerConfigurer fc=new FreeMarkerConfigurer(); fc.setTemplateLoaderPath("file:"+templatePath);//设置模板的获取路径。(我的不知道为啥 必须要加一个file才能取到。) fc.setDefaultEncoding("UTF-8"); return fc; } @Bean public ViewResolver viewResolver() {//设置读取模板的格式 FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); resolver.setCache(true); resolver.setPrefix(""); resolver.setSuffix(".ftl"); resolver.setContentType("text/html; charset=UTF-8"); return resolver; } }
@Autowired //将刚刚配置的配置文件注入。 FreeMarkerConfigurer freeMarkerConfigurer;
@Value("${mail.fromMail.addr}") private String from;//发送人 @Autowired private JavaMailSender mailSender;//spring 提供的邮件发送类
private String getMailText(String username,String account,String password){//这里来填充模板内的占位符 String htmlText=""; try { //通过指定模板名获取FreeMarker模板实例 Template tpl=freeMarkerConfigurer.getConfiguration().getTemplate("passwordTemplate.ftl"); //FreeMarker通过Map传递动态数据 Map map=new HashMap(); map.put("username",username); //注意动态数据的key和模板标签中指定的属性相匹配 map.put("password",password); //注意动态数据的key和模板标签中指定的属性相匹配 map.put("account",account); //解析模板并替换动态数据,最终username将替换模板文件中的${username}标签。 htmlText=FreeMarkerTemplateUtils.processTemplateIntoString(tpl,map); } catch (Exception e) { // TODO Auto-generated catch block throw new GunsException(BizExceptionEnum.TEMPLATE_NOT_FOND); } return htmlText; }
//然后调用下面这个类,并传递相应的参数,就可以实现模板发送邮件啦
public void sendTemplateEmail(String to,String subject,String username,String account,String password) { MimeMessage message = mailSender.createMimeMessage();//创建一个MINE消息 try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); String htmlText=getMailText(username,account,password);//使用模板生成html邮件内容 helper.setText(htmlText, true); mailSender.send(message); System.err.println("模板邮件已经发送。"); } catch (MessagingException e) { System.err.println("发送模板邮件时发生异常!"); } }
//这是我的模板 地址在:D:\template 名称是:passwordTemplate.ftl
尊敬的:${username} | |||
您的HOP系统账号为:${account} 密码为:${password} | |||
HOP系统登陆地址为:https://charging.bmw-brilliance.cn | |||
本邮件为HOP系统自动发送,请勿回复此邮件。如需帮助,请通过以下方式联系我们: | |||
IT helpdesk 电话: 400-606-8961 | |||
IT helpdesk邮箱: [email protected] | |||
WebSMS:https://websms.bmw.com.cn |
//如果模板的有错误的话,邮件也会发送,但是显示的内容为空。注意模板的内容格式正确,和占位符必须都赋值。
//有问题的话可以联系我,小白,相互学习哈。
//先面贴一写发送非模板的邮件
@Override public void sendSimpleEmail(String to, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage();//创建简单邮件消息 message.setFrom(from);//设置发送人 message.setTo(to);//设置收件人 /* String[] adds = {"[email protected]","[email protected]"}; //同时发送给多人 message.setTo(adds);*/ message.setSubject(subject);//设置主题 message.setText(content);//设置内容 try { mailSender.send(message);//执行发送邮件 System.err.println("简单邮件已经发送。"); } catch (Exception e) { System.err.println("发送简单邮件时发生异常!"+e.getMessage()); } } @Override public void sendHtmlEmail(String to, String subject, String content) { MimeMessage message = mailSender.createMimeMessage();//创建一个MINE消息 try { LOGGER.info("from:"+from+",to:"+to+",subject:"+subject+",content:"+content); //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); mailSender.send(message); LOGGER.info("html邮件发送成功"); } catch (MessagingException e) { LOGGER.error("发送html邮件时发生异常!"+e); } } @Override public void sendAttachmentsEmail(String to, String subject, String content, String filePath) { MimeMessage message = mailSender.createMimeMessage();//创建一个MINE消息 try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true);// true表示这个邮件是有附件的 FileSystemResource file = new FileSystemResource(new File(filePath));//创建文件系统资源 String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName, file);//添加附件 mailSender.send(message); System.err.println("带附件的邮件已经发送。"); } catch (MessagingException e) { System.err.println("发送带附件的邮件时发生异常!"+ e); } } @Override public void sendInlineResourceEmail(String to, String subject, String content, String rscPath, String rscId) { MimeMessage message = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); FileSystemResource res = new FileSystemResource(new File(rscPath)); //添加内联资源,一个id对应一个资源,最终通过id来找到该资源 helper.addInline(rscId, res);//添加多个图片可以使用多条和 helper.addInline(rscId, res) 来实现 mailSender.send(message); System.err.println("嵌入静态资源的邮件已经发送。"); } catch (MessagingException e) { System.err.println("发送嵌入静态资源的邮件时发生异常!"); } }