/** * 创建内含图片的邮件,保存为 Outlook 的 ".eml" 文件
* @author haolloyin */
public class WithPictureMessage
{
public static void main(String[] args)
throws Exception{
String from = "test_hao@sina.cn";
String to = "test_hao@163.com";
String subject = "创建一个内含图片的邮件!";
String body = "<h4>内含图片的邮件测试!!!</h4> " +
"<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a></br></br>" +
"<a href = http://haolloyin.blog.51cto.com/>" +
"<img src = \"cid:haolloyin_logo_jpg\"></a>";
/** 上面的 cid 是指 MIME 协议中的 Content-ID 头,它是
* 对于文件资源的唯一标识符,下面的 setContentID()方法
* 中传入的 ID 号就必须与这个haolloyin_logo_jpg相一致
*/
// 创建该邮件应用程序所需的环境信息以及会话信息
Session session = Session.getDefaultInstance(new Properties());
// 以下几句是设置邮件的基本信息
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
msg.setSubject(subject);
msg.setSentDate(new Date());
/*
* 创建一个子类型为 “related” 的 MIME 消息组合对象,
* 其实 MimeMultipart 类还有另外两种子类型,请自行
* 查阅并比较其中的适用场景
*/
MimeMultipart multipart = new MimeMultipart("related");
/*
* 创建一个表示 HTML 正文部分的 MimeBodyPart 对象,
* 并加入 到上一语句创建的 MimeMultiPart 对象中,
* 由于 HTML 正文中包含中文,故下面应该指定字符集为 gbk 或 gb2312
*/
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body, "text/html;charset=gbk");
multipart.addBodyPart(htmlBodyPart);
/*
* 创建一个表示图片文件的 MimeBodyPart 对象,
* 并加入 到上面所创建的 MimeMultiPart 对象中,
* 使用 JAF 框架中的 FileDataSource 类获取图片文件源,
* 它能够自动获知文件的 MIME 格式并设置好消息头
*/
MimeBodyPart jpgBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("F:\\java\\haolloyin_logo.jpg");
jpgBodyPart.setDataHandler(new DataHandler(fds));
jpgBodyPart.setContentID("haolloyin_logo_jpg");
multipart.addBodyPart(jpgBodyPart);
/*
* 这里不用再设置字符集了,因为上面的 HTML MimeBodyPart 对象中
* 已经设置了,而图片文件的因为使用了 DataSource 对象,即 JAF 框架
* 中的具体数据处理操作类,能够自动判断获知数据的 MIME 类型
*/ msg.setContent(multipart);
// 保存对邮件的修改并写入文件中
msg.saveChanges();
msg.writeTo(new FileOutputStream("withPictureMail.eml")); } }
编译、运行,生成 withPictureMail.eml 文件,双击打开
/** * 创建内含图片的邮件,保存为 Outlook 的 ".eml" 文件
* @author haolloyin */
public class WithPictureMessage
{
public static void main(String[] args)
throws Exception{
String from = "test_hao@sina.cn";
String to = "test_hao@163.com";
String subject = "创建一个内含图片的邮件!";
String body = "<h4>内含图片的邮件测试!!!</h4> " +
"<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a></br></br>" +
"<a href = http://haolloyin.blog.51cto.com/>" +
"<img src = \"cid:haolloyin_logo_jpg\"></a>";
/** 上面的 cid 是指 MIME 协议中的 Content-ID 头,它是
* 对于文件资源的唯一标识符,下面的 setContentID()方法
* 中传入的 ID 号就必须与这个haolloyin_logo_jpg相一致
*/
// 创建该邮件应用程序所需的环境信息以及会话信息
Session session = Session.getDefaultInstance(new Properties());
// 以下几句是设置邮件的基本信息
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
msg.setSubject(subject);
msg.setSentDate(new Date());
/*
* 创建一个子类型为 “related” 的 MIME 消息组合对象,
* 其实 MimeMultipart 类还有另外两种子类型,请自行
* 查阅并比较其中的适用场景
*/
MimeMultipart multipart = new MimeMultipart("related");
/*
* 创建一个表示 HTML 正文部分的 MimeBodyPart 对象,
* 并加入 到上一语句创建的 MimeMultiPart 对象中,
* 由于 HTML 正文中包含中文,故下面应该指定字符集为 gbk 或 gb2312
*/
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body, "text/html;charset=gbk");
multipart.addBodyPart(htmlBodyPart);
/*
* 创建一个表示图片文件的 MimeBodyPart 对象,
* 并加入 到上面所创建的 MimeMultiPart 对象中,
* 使用 JAF 框架中的 FileDataSource 类获取图片文件源,
* 它能够自动获知文件的 MIME 格式并设置好消息头
*/
MimeBodyPart jpgBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("F:\\java\\haolloyin_logo.jpg");
jpgBodyPart.setDataHandler(new DataHandler(fds));
jpgBodyPart.setContentID("haolloyin_logo_jpg");
multipart.addBodyPart(jpgBodyPart);
/*
* 这里不用再设置字符集了,因为上面的 HTML MimeBodyPart 对象中
* 已经设置了,而图片文件的因为使用了 DataSource 对象,即 JAF 框架
* 中的具体数据处理操作类,能够自动判断获知数据的 MIME 类型
*/ msg.setContent(multipart);
// 保存对邮件的修改并写入文件中
msg.saveChanges();
msg.writeTo(new FileOutputStream("withPictureMail.eml")); } }
编译、运行,生成 withPictureMail.eml 文件,双击打开