首先是MimeMessage这个类,继承于javax.mail.Message,底下还有IMAPMessage、POP3Message、SmartMimeMessage、SMTPMessage等实现,这里就不扯源码那么远了。
进入正题怎么用:
MimeMessage msg = new MimeMessage(session);
/**
* 设置收件人抄送人标题等此处省略
*/
// 构造Multipart
MimeMultipart mp = new MimeMultipart();
// 向Multipart添加正文
MimeBodyPart mbpContent = new MimeBodyPart();
mbpContent.setContent(content+"<img src=\'cid:"+picName+"'></img></br>", "text/html;charset=utf-8");
MimeBodyPart img = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(path);//path代表图片路径
img.setDataHandler(dh);
// 创建图片的一个表示用于显示在邮件中显示
img.setContentID(picName);//对应上正文里的cid名
mp.addBodyPart(img);
mp.addBodyPart(mbpContent);
mp.setSubType("related");
msg.setContent(mp);
// 发送邮件
Transport.send(msg);
关于mp.setSubType("related");
这个参数可以设置related和mixed分别代表正文中插入和正文后附件形式,
(不写默认是mixed因为源码构造函数设置了mixed)
实现批量插入图片
实际上就是讲cid命名为循环下标
生成邮件正文时
for (int i = 0; i < paths.size(); i++) {
htmlContent = htmlContent+"<img src=\'cid:"+i+"'></img></br>";
}
发送中
File[] filelist = file.listFiles();
if(filelist!=null) {
for(int i=0;i<filelist.length;i++) {
MimeBodyPart img = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(filelist[i]));//图片路径
img.setDataHandler(dh);
// 创建图片的一个表示用于显示在邮件中显示
img.setContentID(i+"");
mp.addBodyPart(img);
}
mp.addBodyPart(mbpContent);
mp.setSubType("related");
}else {
mp.addBodyPart(mbpContent);
}