首先引入相关依赖
<!--发送 Emali的依赖-->
<dependency>
<groupId>org.spring work.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--发送 Emali的模板的依赖-->
<dependency>
<groupId>org.spring work.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
//
mail:
fromMail:
#addr: charging@bmw-brilliance.cn
addr: 15011502566@163.com
spring:
http:
encoding:
force: true
charset: UTF-8
enabled: true
mail:
host: smtp.163.com
username: 15011502566@163.com
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
<div style=\"margin-bottom: 12px; position: relative; z-index: 1;\">
<div class=\"body\" id=\"contentDiv\" style=\"padding: 15px 15px 10px; height: auto; line-height: 1.7; font-size: 14px; position: relative; z-index: 1; -ms-zoom: 1;\">
<table width=\"800\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td height=\"24\" colspan=\"2\">
尊敬的:${username}
</td>
</tr>
<tr>
<td height=\"24\" colspan=\"2\">
</td>
</tr>
<tr>
<td height=\"24\" colspan=\"2\">
您的HOP系统账号为:${account} 密码为:${password}
</td>
</tr>
<tr height=\"24\">
<td height=\"24\" colspan=\"2\"> HOP系统登陆地址为:<a href=\"https://charging.bmw-brilliance.cn\">https://charging.bmw-brilliance.cn</a> </td>
</tr>
<tr>
<td height=\"24\" colspan=\"2\">
</td>
</tr>
<tr>
<td colspan=\"4\" width=\"100%\">本邮件为HOP系统自动发送,请勿回复此邮件。如需帮助,请通过以下方式联系我们:</td>
</tr>
<tr height=\"24\">
<td height=\"24\" colspan=\"2\">IT helpdesk 电话: 400-606-8961</td>
</tr>
<tr height=\"24\">
<td height=\"24\" colspan=\"2\">IT helpdesk邮箱: BMW.CallCenter@bmw-brilliance.cn</td>
</tr>
<tr height=\"24\">
<td> WebSMS:<a href=\"https://websms.bmw.com.cn\">https://websms.bmw.com.cn</a></td>
</tr>
</table>
</div>
</div>
//如果模板的有错误的话,邮件也会发送,但是显示的内容为空。注意模板的内容格式正确,和占位符必须都赋值。
//有问题的话可以联系我,小白,相互学习哈。
//先面贴一写发送非模板的邮件
@Override
public void sendSimpleEmail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();//创建简单邮件消息
message.setFrom(from);//设置发送人
message.setTo(to);//设置收件人
/* String[] adds = {\"xxx@qq.com\",\"yyy@qq.com\"}; //同时发送给多人
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);//添加多个图片可以使用多条 <img src=\'cid:\" + rscId + \"\' > 和 helper.addInline(rscId, res) 来实现
mailSender.send(message);
System.err.println(\"嵌入静态资源的邮件已经发送。\");
} catch (MessagingException e) {
System.err.println(\"发送嵌入静态资源的邮件时发生异常!\");
}
}
继续阅读与本文标签相同的文章
7 个实用的 Bash 历史记录操作方式
-
Edge逐步融入Fluent Design元素:新版颜色筛选器控件上线
2026-05-18栏目: 教程
-
阿里云服务器突发性能实例t5配置性能使用场景及注意事项
2026-05-18栏目: 教程
-
Square为澳大利亚餐馆提供定制平台!
2026-05-18栏目: 教程
-
711便利店:日本计划关店1000家,母公司将裁员3000人
2026-05-18栏目: 教程
-
阿里云服务器共享型实例xn4 n4 性价比高适合个人博客 中小型网站
2026-05-18栏目: 教程
