【javaMail】【2.发HTML邮件】java mail 发送HTML邮件

背景

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值