上一篇日志我与大家分享了利用JavaMail编写单纯的文字和图片邮件的过程,今天就跟大家分享一下混合并且复杂的邮件编写,准备工作和上一篇日志相同。
那么我们直接来看源码:
Code
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 }
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来设置描述关系,所以在源码编写时一定要注意邮件各部分之间的关系,否则生成会失败。
此外,在上面的源码中我们是拿音频文件来做的测试,大家可以使用其他允许格式的文件来进行测试,这里就不再做进一步测试。
希望大家以后多多光临我的博客,我也会即使把自己学到的与大家分享,在互相学习的同时也请老鸟们做指导。