Java mail模板发送高级邮件
一、见贤思齐焉
我们之前自己发的邮件,大家又没有感觉比较丑呢???毫无美感可言,只有空洞的文字,甚至连基础的排版都没有。如果这是给女娃表白的邮件,那我只能陪你一起和顿闷酒咯!!!
邮箱收件箱中翻一翻,几乎每一条邮件都比我们的好看一倍、两倍、甚至好多倍!!!见贤思齐焉!此时此刻,有没有一种想要学习的冲动呢!!!下面是Twitter的一封邮件,仅供参考。
二、HTML格式的邮件
邮件内容主要分为两种,HTML格式和纯文本。两种各有优劣,两种各有用途吧,在这里不必深究。一般开发网站还是建议使用HTML格式,因为要注意用户体验感,如果太丑了的话,哪个用户还愿意使用你的产品呢?
因此诞生了邮件模板,纯html格式,CSS采用行内样式。借鉴了一个大牛写的邮件样式,感兴趣的可以自己修改或者重写。(注意:文件格式为:.ftl)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAOldLmf-1574782034470)(…/images/HTML邮件模板.png)]
<body style="color: #666; font-size: 14px; font-family: 'Open Sans',Helvetica,Arial,sans-serif;">
<div class="box-content" style="width: 80%; margin: 20px auto; max-width: 800px; min-width: 600px;">
<div class="header-tip" style="font-size: 12px;
color: #aaa;
text-align: right;
padding-right: 25px;
padding-bottom: 10px;">
Confidential - Scale Alarm Use Only
</div>
<div class="info-top" style="padding: 15px 25px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
background: ${bgColor};
color: #fff;
overflow: hidden;
line-height: 32px;">
<img src="cid:icon-alarm" style="float: left; margin: 0 10px 0 0; width: 32px;" /><div style="color:#010e07"><strong>服务实例水平伸缩通知</strong></div>
</div>
<div class="info-wrap" style="border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
border:1px solid #ddd;
overflow: hidden;
padding: 15px 15px 20px;">
<div class="tips" style="padding:15px;">
<p style=" list-style: 160%; margin: 10px 0;">Hi,</p>
<p style=" list-style: 160%; margin: 10px 0;">${First}</p>
</div>
<div class="time" style="text-align: right; color: #999; padding: 0 15px 15px;">${Second}</div>
<br>
<table class="list" style="width: 100%; border-collapse: collapse; border-top:1px solid #eee; font-size:12px;">
<thead>
<tr style=" background: #fafafa; color: #333; border-bottom: 1px solid #eee;">
${Third}
</tr>
</thead>
<tbody>
${Fourth}
</tbody>
</table>
</div>
</div>
</body>
三、生成动态邮件
模板写好了,数据还需要填充,生成动态模板邮件才是王道!!!如上图的模板照片中的第?个就是动态生成的数据,其中在模板中表述为${name}
表示填充变量名,进行邮件生成时就可以进行相应的填充。
1、所需依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.quhaodian</groupId>
<artifactId>freemaker</artifactId>
<version>1.8.1</version>
</dependency>
2、添加所需照片
在邮件中添加照片,不是像写普通网页一样,加个相对路径就可以显示了!!!
- 设置图片id 传输图片
//1、读取文件路径
String imagePath = MailUtils.class.getResource("/mail/images/cjdx.jpg").getPath();
//2、创建图片容器部分
MimeBodyPart image = new MimeBodyPart();
//3、读取源文件流并处理
DataHandler dh = new DataHandler(new FileDataSource(imagePath));//图片路径
//4、图片信息放入容器
image.setDataHandler(dh);
//5、创建图片的一个ID表示用于显示在邮件中显示
image.setContentID("icon-alarm");
//6、加入主容器部分
mainPart.addBodyPart(image);
- 将图片设置为外链
图床api,该网站可把你的图片转换至各大厂商的图床,直接获取直链。号称无限外链、永久免费。建议照片上传上去后,还要留本地备份,毕竟谁也说不准他哪天就不见了!!!
3、转换模板
public static String transforHtml(Map<String,String> dataMap, String templateName) {
//创建配置实例
Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
//设置编码
configuration.setDefaultEncoding("UTF-8");
//ftl模板文件统一放至 com.lun.template 包下面
File file = new ile(MailUtils.class.getClassLoader().getResource("mail/").getFile());
configuration.setDirectoryForTemplateLoading(file);
//获取模板
Template template = configuration.getTemplate(templateName);
//将模板和数据模型合并生成文件
StringWriter stringWriter = new StringWriter();
//生成html
template.process(dataMap, stringWriter);
return stringWriter.toString();
}
4、发送HTML邮件
其中map就是上文提到的转换参数,key中是${name}
中的name, value中就是插入模板中的值,由此实现动态生成模板。
//建立邮件对象
MimeMessage message = new MimeMessage(session);
//设置邮件的发件人、收件人、主题
//附带发件人名字
//设置自定义发件人昵称
String nickFrom = MimeUtility.encodeText("职能搜索平台");
String nickTo = MimeUtility.encodeText("酷酷的用户");
//设置发信人
message.setFrom(new InternetAddress(nickFrom+"<524235428@qq.com>"));
Address []tos = {new InternetAddress(nickTo+"<couragehe135@163.com>"),new InternetAddress(nickTo+"<couragehe135@163.com>")};
message.setRecipients(Message.RecipientType.TO, tos);
message.setSubject("多发出!!!");
Map<String,String> map= new HashMap<String,String>();
map.put("bgColor", "#f40");
map.put("First", "第一个");
map.put("Second", "第二个");
map.put("Third", "第三个");
map.put("Fourth", "第四个");
String mailBody = transforHtml(map, "mail.ftl");
// String mailBody = TemplateFactory.genrateHtmlFromFtl(templateName, map);
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
html.setContent(mailBody, "text/html; charset=utf-8");
mainPart.addBodyPart(html);
MailUtils.setImage(mainPart);
// 4、将MiniMultipart对象设置为邮件内容
message.setContent(mainPart);
message.saveChanges();
message.setSentDate(new Date());
message.saveChanges();
//发送邮件
Transport.send(message);
参考:https://blog.csdn.net/ll837448792/article/details/93620939
参考:http://www.shaoqun.com/a/89502.html