复合邮件的整体结构

java 开源邮箱客户端 java邮件开发详解_数据库


复合邮件的组合关系

java 开源邮箱客户端 java邮件开发详解_html_02

alternative:选择关系。上面的纯文本和超文本之间就是一种选择关系。

related:关联关系。假如上面的超文本正文是展示一幅图片,那么我们在发送邮件的时候必须要将这幅图片包含到邮件中,也就是所谓的内嵌资源,这个内嵌资源是给超文本用的。所以他们两者之间是一个关联关系。

mixed:混合关系。在纯文本、超文本和内嵌资源组成一个整体和,他们与附件并列着,两者之间就是一个混合关系了。


复合邮件组织结构的API

java 开源邮箱客户端 java邮件开发详解_html_03

MimeMessage类表示整封电子邮件。

MimeBodyPart类表示邮件的一个MiME消息。

MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。


下面一个实例:该邮件里面包含两个附件、正文部分包括纯文本和超文本,超文本表示展示一张图片。源代码如下:

public class JavaMail_03 {

	public static void main(String[] args) throws Exception {
		Properties props = new Properties();
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.host", "smtp.163.com");
		Session session = Session.getInstance(props,
				new Authenticator(){
					protected PasswordAuthentication getPasswordAuthentication(){
						return new PasswordAuthentication("*****","******");
					}
		});
		
		Message message = new MimeMessage(session);
		message.setSubject("第三个JavaMail测试程序");
		message.setFrom(new InternetAddress("\""+MimeUtility.encodeText("陈明")+"\"<chenssy995812509@163.com>"));
		message.setRecipients(RecipientType.TO, new Address[]{new InternetAddress("995812509@qq.com")});
		
		//邮件正文
		MimeMultipart multipart = new MimeMultipart("mixed");
		message.setContent(multipart);
		/*
		 * 创建邮件的内容
		 * 包括一个邮件正文和两个附件
		 */
		MimeBodyPart content = new MimeBodyPart();      //邮件内容
		MimeBodyPart attch1 = new MimeBodyPart();      //附件1
		MimeBodyPart attch2 = new MimeBodyPart();      //附件2
		//将邮件内容添加到multipart中
		multipart.addBodyPart(content);
		multipart.addBodyPart(attch1);
		multipart.addBodyPart(attch2);
		
		//设置附件1
		DataSource ds1 = new FileDataSource("G:\\电子书\\oracle口令.txt");
		DataHandler dh1 = new DataHandler(ds1);
		attch1.setDataHandler(dh1);
		attch1.setFileName("oracle.txt");
		//设置附件2
		DataSource ds2 = new FileDataSource("G:\\电子书\\账号.txt");
		DataHandler dh2 = new DataHandler(ds2);
		attch2.setDataHandler(dh2);
		attch2.setFileName(MimeUtility.encodeText("账号.txt"));
		/*
		 * 设置内容(正文)---是一个复杂体
		 * 包括HTML正文和显示一张图片
		 */
		MimeMultipart bodyMultipart = new MimeMultipart("related");
		content.setContent(bodyMultipart);
		//构造正文
		MimeBodyPart htmlBody = new MimeBodyPart();
		MimeBodyPart gifBody = new MimeBodyPart();
		bodyMultipart.addBodyPart(htmlBody);
		bodyMultipart.addBodyPart(gifBody);
	
		//设置图片
		DataSource gifds = new FileDataSource("F:\\图片\\图片\\4.jpg");
		DataHandler gifdh = new DataHandler(gifds);
		gifBody.setDataHandler(gifdh);
		gifBody.setHeader("Content-ID", "<"+gifds.getName()+">");
		//gifBody.setHeader("Content-Location", "http://www.itcast.cn/logo.gif");
		//设置HTML正文
		htmlBody.setContent("<span style='color:red;font-size:16px'>这是我的第三个JavaMail测试哦!包括了附件和图片,有点儿复杂...</span><br>" +
				"显示的图片<img src='cid:4.jpg'/>", "text/html;charset=UTF-8");
		
		
		message.saveChanges();        //生成邮件
		Transport.send(message);
	}

}