【javaMail】【2.发HTML邮件】java mail 发送HTML邮件
2016-01-08 23:45
441 查看
背景
plaintext的邮件正文,没有颜色,没有大小,非常枯燥,甚至给出一个网址都不会自动转换成可以点击的(QQ邮箱可以,163会保持文本)如果可以用html的方式去装扮正文内容,肯定很棒了
实现
在java代码中写html很蛋疼,就像只有servlet用out来拼html一样,所以还是先预先写好html文件,在读取进来好了注意:css和js一般都会被邮件收件方的系统给删去的,因为会干扰他们web版邮件系统,所以我们最多只能内联地使用style="color:red;"这些有些的样式了
package mailTest; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Date; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class Sender implements Runnable {//实现Runnable接口,为第三步的多线程发送做准备 Properties props; Session session; MimeMessage msg; public Sender() { System.out.println("constructor..."); props = new Properties(); props.put("mail.smtp.host", "smtp.163.com");//smtp服务器 session = Session.getInstance(props, null); msg = new MimeMessage(session); try { msg.setFrom("abc@163.com"); msg.setRecipients(Message.RecipientType.TO, "abc@qq.com");//收件地址 msg.setSubject("JavaMail hello world example"); msg.setSentDate(new Date()); String filename = "C:\\Users\\Tony\\Desktop\\a.html";//html文件地址 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"));// 解决读取中文乱码 String line = null; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null) { sb.append(line);//拼接到stringBuffer sb.append("\n");//按理说可以不用换行都可以解析html } br.close(); BodyPart bodyPart = new MimeBodyPart();//BodyPart是邮件内容的承载体,可以是文件,图片,附件等... bodyPart.setContent(sb.toString(), "text/html;charset=UTF-8");//设置页面的编码值 Multipart multiPart = new MimeMultipart();//Multipart又是BodyPart的承载体,一个multiPart可以包含多个BodyPart multiPart.addBodyPart(bodyPart);//将bodyPart添加到multiPart msg.setContent(multiPart);将MultiPart设为邮件内容主体msg的 msg.saveChanges();//大概需要这么一下 // msg.setText("Hello, world!\n");//setContent涵盖了它的作用 } catch (Exception e) { e.printStackTrace(); } } public void send() {//测试方便,单独将发送过程分离出来了 try { Transport.send(msg, "abc@163.com", "abc");//发件人的邮箱地址和密码 System.out.println("sent success!"); } catch (MessagingException mex) { System.out.println(new Date() + " send failed, exception: " + mex); } } @Override public void run() { // TODO Auto-generated method stub send();//多线程执行的内容 } }
html做成模板
放下链接,有空再做,头晕大概的思路就是###title###,这样写着模板,然后用java读取解析模板,将###*###替换成map.getValue(*) http://www.newxing.com/Tech/Java/Web/107.html
相关文章推荐
- 基于注解的spring MVC程序
- spring MVC 入门程序
- java基础----数组
- Java finalize方法使用
- spring MVC框架简介
- jcl-over-slf4j log桥接工具简介
- Eclipse debug的快捷键
- Spring 使用注解装配Bean
- Spring 4.2入门之HelloWorld
- JAVA 中数组的几种排序方法
- 使用SL4J桥接遗留的API(Bridging legacy APIs)
- 【javaMail】【1.基础发邮件】java mail 发送plain text 邮件 helloworld
- java日志,需要知道的几件事
- 理解类加载器:j2ee 环境下的 log4j
- 十种JAVA排序算法实例
- JVM 类加载器介绍及其父亲委托机制 Parent Delegation
- 使用JAVA直观感受快速排序与冒泡排序的性能差异
- Java 中File类的使用
- 深入Java集合学习系列:HashMap的实现原理
- 你真的了解Java静态内部类吗