您的位置:首页 > 编程语言 > Java开发

【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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: