【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("[email protected]");
			msg.setRecipients(Message.RecipientType.TO, "[email protected]");//收件地址
			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, "[email protected]", "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

你可能感兴趣的:(Java)