现在的位置: 首页 > 综合 > 正文

包含附件和嵌套图片的复合邮件的生成

2017年11月19日 ⁄ 综合 ⁄ 共 3207字 ⁄ 字号 评论关闭

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!

复合邮件的整体结构图

 MIME中的组合关系

复合邮件的分隔线层次结构分析

邮件组织结构相关的API

MimeMessage类表示整封邮件。
MimeBodyPart类表示邮件的一个MIME消息。
MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

javaMail生成包含附件和嵌套图片的复合邮件:

package edu.mail.util;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendMultipartMessageDemo3 {

	public static void main(String[] args) throws MessagingException, IOException {

	   Properties props = new Properties();
	   Session session = Session.getInstance(props);
	   session.setDebug(true);
       Message msg = new MimeMessage(session);
       msg.setSubject("the first multipart javaMail");
       //设置发送人
       msg.setFrom(new InternetAddress("xh216319@163.com"));
       //设置收件人
       msg.setRecipients(RecipientType.TO, InternetAddress.parse("itstar1965@sina.com,xh216319@163.com"));
       //设置抄送人
       msg.setRecipient(RecipientType.CC,new InternetAddress("itstar1965@sohu.com"));
       //设置密送人
       msg.setRecipient(RecipientType.BCC,new InternetAddress("1277040964@qq.com"));
       
	   MimeMultipart msgMultipart = new MimeMultipart("mixed");
	   msg.setContent(msgMultipart);
	   //为message对象创建content组件和attch组件
	   MimeBodyPart content = new MimeBodyPart();
	   MimeBodyPart attch1 = new MimeBodyPart();
	   MimeBodyPart attch2 = new MimeBodyPart();
       //将两个附件对象和正文对象添加到msgMultipart对象
	   msgMultipart.addBodyPart(content);
	   msgMultipart.addBodyPart(attch1);
	   msgMultipart.addBodyPart(attch2);
	   
	   //为附件1关联数据源
	   DataSource ds1 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\river.jpg");
	   DataHandler dh1 = new DataHandler(ds1);
	   attch1.setDataHandler(dh1);
	   attch1.setFileName("river.jpg");
	   //为附件2关联数据源
	   DataSource ds2 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\mail.bat");
	   DataHandler dh2 = new DataHandler(ds2);
	   attch2.setDataHandler(dh2);
	   attch2.setFileName("mail.bat");
	   //因为正文content也是一个Multipart对象,其组件是related关系,所以content.setContent(contentMultipart)
	   MimeMultipart contentMultipart = new MimeMultipart("related");
	   content.setContent(contentMultipart);
	   //为contentMultipart创建htmlPart组件和gifPart组件
	   MimeBodyPart htmlPart = new MimeBodyPart();
	   MimeBodyPart gifPart = new MimeBodyPart();
	   //将htmlPart和gifPart对象添加到contentMultipart对象
	   contentMultipart.addBodyPart(htmlPart);
	   contentMultipart.addBodyPart(gifPart);
	   
	   DataSource ds3 = new FileDataSource("C:\\Documents and Settings\\Administrator\\桌面\\2012_03130103.JPG");
	   DataHandler dh3 = new DataHandler(ds3);
	   gifPart.setDataHandler(dh3);
       gifPart.setFileName("itstar.gif");
       gifPart.setHeader("Content-Location", "http://www.csdn.net/itstar.gif");
	   //这里src="http://www.csdn.net/itstar.gif"实际上指向的是其关联的gifPart对象
	   htmlPart.setContent("这是我的第一个复合结构的JavaMail,我的照片<img height=100px,width=80px src='http://www.csdn.net/itstar.gif'/>","text/html;charset=utf-8");
	   
      //保存message所做的改变
       msg.saveChanges();
       OutputStream ops = new FileOutputStream("C:\\Documents and Settings\\Administrator\\桌面\\SendMultipartMessageDemo3.eml");
      //将message对象写入文件流中
       msg.writeTo(ops);
       ops.close();
      }

}

生成的SendMultipartMessageDemo3.eml邮件打开后:

抱歉!评论已关闭.