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

javamail发送复杂邮件(包含文本、图片、附件)

2017-04-01 10:01 507 查看
           上一篇文章介绍了如何进行简单文本邮件的传输,相信阅读的人都能看懂并收获不少。其实编程这件事情,很多时候就是你听起来一个功能的实现好像很难,但当你着手去实现,去研究他的实现过程的时候就会发现其实也没有想象中那么难。接下来给大家介绍一下如何实现复杂邮件的传输。网上有很多教程,参考了不少,选了比较简洁且容易理解的代码共享出来,以便大家分享。ps:下面代码都是经过自己亲测可行!

        还是跟上一篇文章一样涉及到2个步骤:1.创建一封复杂邮件;2.发送复杂邮件。第2步发送邮件的过程和上一篇一模一样,这边就不多介绍了,详情可见上一篇文章。这边重点说一下第1步创建复杂文件的实现,主要可以分为:①创建图片节点;②创建文本节点;③文本和图片节点结合;④创建附件节点;⑤将(文本+图片)节点和附件节点结合;⑥将整个混合节点添加到邮件内容中,并保存邮件设置。

       接下来直接上代码,代码中都有详细的注释,如果有不清楚或者实现不了的可以自行百度,或者评论进行讨论交流哦~~~!

public MimeMessage createComplicatedMessage(Session session,String sendMail,String[] receiveMail,String subject,String msgContent) throws Exception{

MimeMessage message =new MimeMessage(session);

message.setFrom(new InternetAddress(sendMail,"发件人昵称","UTF-8"));
Address[] addr = new Address[receiveMail.length];
for(int i=0;i<addr.length;i++){
addr[i] = new InternetAddress(receiveMail[i], "收件人昵称", "UTF-8");
}
message.addRecipients(RecipientType.TO, addr);
message.setSubject(subject);

/*
* 邮件内容的创建:图片和附件
*/

//创建图片节点
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("bgicon.jpg")); //读取本地文件
image.setDataHandler(dh); //将数据添加到节点
image.setContentID("image_id");// 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)

//创建文本节点
MimeBodyPart text = new MimeBodyPart();
//将图片包含到文本内容中
text.setContent("这是一张图片<br/><img src='cid:image_id'/>", "text/html;charset=UTF-8");

//将文本和图片节点结合
MimeMultipart text_image = new MimeMultipart();
text_image.addBodyPart(text);
text_image.addBodyPart(image);
text_image.setSubType("related"); //关联关系 有内嵌资源要定义related

//将混合节点封装成普通节点BodyPart,邮件最终由多个BodyPart组成
MimeBodyPart text_image_body = new MimeBodyPart();
text_image_body.setContent(text_image);

//添加附件节点
MimeBodyPart document = new MimeBodyPart();
DataHandler dhdoc = new DataHandler(new FileDataSource("d:\\123.doc")); //读取本地文档
document.setDataHandler(dhdoc); //将附件数据添加到节点
document.setFileName(MimeUtility.decodeText(dhdoc.getName())); //设置附件文件名

//设置文本和图片,附件的关系(混合大节点)
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text_image_body);
mm.addBodyPart(document);
mm.setSubType("mixed"); //有附件资源要定义mixed

//最终节点添加到邮件中
message.setContent(mm);
message.setSentDate(new Date());
message.saveChanges();

return message;
}

       以上是创建复杂邮件的代码,至于如何发送邮件,代码在上一篇文章中,大家可以自行查阅这边就不贴出来了!如果有什么问题或需要补充的,大家可以留言交流。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息