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

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

       以上是创建复杂邮件的代码,至于如何发送邮件,代码在上一篇文章中,大家可以自行查阅这边就不贴出来了!如果有什么问题或需要补充的,大家可以留言交流。。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值