上一篇日志我与大家分享了利用JavaMail编写单纯的文字和图片邮件的过程,今天就跟大家分享一下混合并且复杂的邮件编写,准备工作和上一篇日志相同。
那么我们直接来看源码:
![12124250_VhN4.gif](https://i-blog.csdnimg.cn/blog_migrate/4d1021f6ec6f91dac7a0e73485c48021.gif)
![12124250_XHRt.gif](https://i-blog.csdnimg.cn/blog_migrate/a25cb3dddbddfc81f7dd1c45d88f8819.gif)
1 import java.io.FileNotFoundException;
2
3 import java.io.FileOutputStream;
4
5 import java.io.IOException;
6
7 import java.util.Properties;
8
9 import javax.activation.DataHandler;
10
11 import javax.activation.FileDataSource;
12
13 import javax.mail.Message;
14
15 import javax.mail.MessagingException;
16
17 import javax.mail.Session;
18
19 import javax.mail.internet.AddressException;
20
21 import javax.mail.internet.InternetAddress;
22
23 import javax.mail.internet.MimeBodyPart;
24
25 import javax.mail.internet.MimeMessage;
26
27 import javax.mail.internet.MimeMultipart;
28
29 import javax.mail.internet.MimeUtility;
30
31
32
33 public class MailAttch {
34
35
36
37 public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {
38
39 // 1.创建邮件
40
41 Properties prop = new Properties();
42
43 // 2.创建session独享
44
45 Session session = Session.getInstance(prop);
46
47 // 创建邮件主体
48
49 MimeMessage message = new MimeMessage(session);
50
51 /* 3.设置邮件的属性 */
52
53 // 设置发件人地址
54
55 message.setFrom( new InternetAddress( " L@l.com " ));
56
57 // 设置收件人地址
58
59 message.setRecipient(Message.RecipientType.TO, new InternetAddress( " Pyl@l.com " ));
60
61 // 设置邮件的主题
62
63 message.setSubject( " 你好!给你推荐一首歌! " );
64
65
66
67 // 4.创建邮件正文
68
69 MimeBodyPart content = new MimeBodyPart();
70
71 content.setContent( " 这是一张图片:<br/><img src='cid:xx.jpg'> " , " text/html;charset=gb2312 " );
72
73
74
75 // 5.设置图片
76
77 MimeBodyPart image = new MimeBodyPart();
78
79 // 将图片加载到DataHandler对象中
80
81 image.setDataHandler( new DataHandler( new FileDataSource( " src\\snow.jpg " )));
82
83 // 设置该图片在正文中的ID,是为了让HTML标签引用
84
85 image.setContentID( " xx.jpg " );
86
87
88
89 // 6.设置音乐
90
91 MimeBodyPart music = new MimeBodyPart();
92
93 // 将音乐加载如DataHandler对象中
94
95 music.setDataHandler( new DataHandler( new FileDataSource( " src\\06.mp3 " )));
96
97 // 防止该附件名字乱码
98
99 music.setFileName(MimeUtility.encodeText( " 你听得到.mp3 " ));
100
101
102
103 // 7.描述关系
104
105 MimeMultipart mm = new MimeMultipart();
106
107 // 装入正文
108
109 mm.addBodyPart(content);
110
111 // 装入图片
112
113 mm.addBodyPart(image);
114
115 // 装入音乐
116
117 mm.addBodyPart(music);
118
119
120
121 // 设置提交类型
122
123 mm.setSubType( " mixed " );
124
125 // 将关系设置到邮件体中
126
127 message.setContent(mm);
128
129 // 保存邮件更改
130
131 message.saveChanges();
132
133 // 在制定位置生成该邮件
134
135 message.writeTo( new FileOutputStream( " G:\\5.eml " ));
136
137 }
138
139 }
邮件呈现效果为:
在源码中我们可以看到,大部分使用的类与方法相同,而在描述邮件各部分之间关系的时候我们可以看到关系变为:
mm.setSubType("mixed");
这种关系模式为混合模式,而关于混合我们可以根据以下图示来进一步理解:
在图示中,我们可以看到,当正文Content与图片Pictuer同时存在时关系为related并且作为一个MimeBodyPart来设置描述关系;而当出现其他附件时,将作为单独的附件MimeBodyPart来设置描述关系,所以在源码编写时一定要注意邮件各部分之间的关系,否则生成会失败。
此外,在上面的源码中我们是拿音频文件来做的测试,大家可以使用其他允许格式的文件来进行测试,这里就不再做进一步测试。
希望大家以后多多光临我的博客,我也会即使把自己学到的与大家分享,在互相学习的同时也请老鸟们做指导。