package zxx.createMessage;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
* 5.9创建一个包含一个内嵌图片的复杂邮件
* 要点:
* 1、创建一个可以存放多种类型的MimeMultipart对象
* 2、创建相应数据部分 MimeBodyPart
* 3、将每个MimeBodyPart对象添加到MimeMultipart中去
* 4、将存放多种数据类型的MimeMultipart放到MimeMessage中去
* @author 后飞IT
*
*/
public class PictureMessage {
public static void main(String[] args) {
try {
String from = "hepuchenxiaohang@126.com";
String to = "hepuchenxiaohang@126.com";
String subject = "test";
// 指向的src是一个内嵌的资源 其ContentID=it315_alogo_gif
//注意写的时候要加上 cid:+ContentId
String body = "<h4>欢迎大家阅读次邮件</h4>"
+ "<img src=\"cid:it315_alogo_gif\"/>";
// 创建一个session实例,用于定义客户端和邮件服务器之间的网络连接信息
Session session = Session.getDefaultInstance(new Properties());
// 创建一个MimeMessage实例对象
MimeMessage msg = new MimeMessage(session);
// 设置发件人
msg.setFrom(new InternetAddress(from));
// 设置收件人
msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
// 设置发送日期
msg.setSentDate(new Date());
// 设置纯文本的邮件主题
msg.setSubject(subject);
// 以下部分是与上面篇章不一样的
/*
* The MimeMultipart class is an implementation of the abstract
* Multipart class that uses MIME conventions for the multipart
* data.
*/
/** 创建一个子类型问ralated的mimemessage的对象 依赖类型的MimeMessage */
MimeMultipart multipart = new MimeMultipart("ralated");
/*
* 创建一个表示html振文的MimeBodyPart对象,并将它 添加到前面创建的MimeMultipart对象中
*/
MimeBodyPart htmlBodyPart = new MimeBodyPart();
// 将html的内容信息放置到表示一个MIME信息的MimeBodyPart中
htmlBodyPart.setContent(body, "text/html;charset=gb2312");
// 之后将这个MIME信息添加到MIMEMESSAGE中去
multipart.addBodyPart(htmlBodyPart);
/*
* 创建一个表示图片内容的MimeBodyPart对象, 并将它加入到前面创建的MimeMultipart对象中
*/
MimeBodyPart gifBodyPart = new MimeBodyPart();
// 定义一个文件数据源
FileDataSource fds = new FileDataSource("c:\\1.gif");
/*
* 当mimeBodyPart对象在生成mime消息时,调用DataHandler对象中的方法
* 获取所需的数据信息,DataHandler是一个数据访问接口,它可以读取各种数据和返回数据源的MIME类型
*/
gifBodyPart.setDataHandler(new DataHandler(fds));
// 设置唯一表示符
gifBodyPart.setContentID("it315_alogo_gif");
/*
* 不必是使用gifBodyPart.setHandler("ContentType","imge/gif");
* 来设置MIME类型,上面的setDataHandler方法能够设置好ContentType消息头
*/
// 添加到MIMEMESSAGE信息中去
multipart.addBodyPart(gifBodyPart);
/*
* 将MimeMultipart对象设置为整个邮件的内容,要主要调用saveChange方法进行更新
*/
msg.setContent(multipart);
// 保存最终生成的邮件正文
msg.saveChanges();
// 把MimeMessage对象中的内容写入到文件中去
msg.writeTo(new FileOutputStream("C:\\pictureMessage.eml"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
java邮件开发详解笔记(生成内嵌图片的复杂邮件)
最新推荐文章于 2022-09-09 21:09:35 发布