Java mail模板发送高级邮件(二)
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();//生成htmltemplate.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内容的MimeBodyPartBodyPart 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
Java mail模板发送高级邮件(二)相关推荐
- Java实战-用Java mail实现Exchange发邮件给你喜欢的人
目录 1. 官方指导文章 2. 需要用到com.microsoft.ews-java-api 2.1 maven中添加 2.2 gradle中添加 3. 完整代码:新建一个MailUtil.java类 ...
- java通过SMTP发送QQ邮件的完全步骤
java通过SMTP发送QQ邮件的完全步骤 首先,我们需要打开QQ邮箱的SMTP服务,因为QQ邮箱对于一般的用户都是默认关闭SMTP服务的. 打开QQ邮箱,点击设置 点击帐户 找到SMTP服务的选项, ...
- java mail 已发送_Javamail新建邮件后,怎么保存进已发送或草稿箱?
public void sendMail(String subject, String from, List to, List cc, List bcc, String bodyText, List ...
- java mail 回复邮件_JavaMail - 退回邮件( Bounced Messages)
JavaMail - 退回邮件( Bounced Messages) 由于多种原因,可以退回邮件. rfc1211深入讨论了这个问题. 只有服务器才能确定是否存在特定邮箱或用户名. 当服务器检测到错误 ...
- java mail 抄送多用户_javaMail邮件发送功能(多收件人,多抄送人,多密送人,多附件)...
先看源码,再来理解,可以直接使用! JavaMailWithAttachment.java: private MimeMessage message; private Session session; ...
- 【Java】JavaMail发送QQ邮件邮件
荐读 JavaMail邮件发送不成功的那些坑人情况及分析说明 javax.mail.AuthenticationFailedException异常的处理 QQ邮箱如何开启POP3/SMTP服务 发送说 ...
- java mail 邮箱发送_Java Mail 发送邮件
什么是 SMTP 协议 SMTP或简单的邮件传输协议,是一种将电子邮件从一台服务器发送到另一台服务器的快速简便的方法.通过 SendGrid 等第三方服务商提供的SMTP服务,我们可以通过第三方服务器 ...
- java mail 已发送_JavaMail获取已发送邮件
public static voidmain(String args[]) { Properties props= new Properties(); //参数配置 props.setProperty ...
- Java Mail多人群发与多附件发送
最近公司的项目用到了Java Mail来发送注册邮件,不过,开发的时候都是使用封装好的JAR,以前也不是很了解Java Mail的使用原理.网上很多代码都是只有一部分,看一看也跑不起来,今天正好有时间 ...
最新文章
- 面试干货——年底干货大放送,你准备好了吗?
- SQL语句练习(三)
- PB初体验 class one
- Python class 类中 __init__ 函数
- 避免使用CreateThread函数,导致的内存泄露
- Java Swing –日期选择器对话框
- python print(f)执行将报错_Linux中为什么执行自己的程序要在前面加./
- Python练习:平方值格式化
- 改名之后的 Java EE,现在有什么新进展?
- Android下拉刷新上拉更多瀑布流(附源码)
- Linux基础——常用命令
- 第三组视频:基于OCFS2的双主DRBD
- 文献笔记4 water volume variations
- FGMap一个仿GoogleMap的WebGIS客户端
- 怎么用屏幕录像工具录制游戏的精彩时刻
- SSM框架整合demo
- 最简单的P2P加密聊天软件开发完成
- 《IT老外在中国》第28期:他经历了Adobe最惊心动魄的一跃
- TCP RTT测量妙计
- UG二次开发GRIP成品工具
热门文章
- Java封装动态编译
- Java设计模式——工厂模式讲解以及在JDK中源码分析
- c语言 北京时间转换utc时间_c语言实战 BJT时间转化位UTC时间
- 数据库存储图片路径并显示到前端
- Spring Boot 排除自动配置
- 一篇 认为未来房价会跌的文章
- [搞定一面] 快速搞定一面~技术面
- 免费内网穿透 对外一键发布网站 穿透80端口
- 超详细的mac环境下编译魔改frida-server
- android 蓝牙耳机按钮,如何利用android从蓝牙耳机中捕获关键事件_bluetooth_开发99编程知识库...