在编写测试之前我们需要做一下准备工作,其中需要的工具有:
- Javax.mail.* Jar包
- OutLook各版本均可,其他邮件工具也可,但呈现效果有差异,此处测试用了OutLook与网易的闪电邮,但结果不同。
- 开发工具MyEclipse 9.0M1(此版本为8.6升级版本)
- 两张你认为漂亮的图片,作为测试素材
首先,我们建立一个Java项目——创建包——创建一个Java类文件,如下图所示:
Lib文件夹中放入开始我们提到的JavaMail的Jar包,并且添加到Java扩展Jar包中至暖瓶状态。
在新建的MailTest类中我们先做一个简单的文字邮件,所有的源码都在main方法中写然后执行生成。
源码如下:
View 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.mail.Message;
10
11 import javax.mail.MessagingException;
12
13 import javax.mail.Session;
14
15 import javax.mail.internet.AddressException;
16
17 import javax.mail.internet.InternetAddress;
18
19 import javax.mail.internet.MimeBodyPart;
20
21 import javax.mail.internet.MimeMessage;
22
23 import javax.mail.internet.MimeMultipart;
24
25
26
27 public class MimeMail {
28
29
30
31 public static void main(String[] args) throws AddressException, MessagingException, FileNotFoundException, IOException {
32
33 //1.创建邮件
34
35 Properties prop = new Properties();
36
37 //2.创建session
38
39 Session session = Session.getInstance(prop);
40
41 //创建邮件主体
42
43 MimeMessage message = new MimeMessage(session);
44
45
46
47 /*3.设置邮件属性*/
48
49 //设置邮件发送人地址
50
51 message.setFrom(new InternetAddress("L@l.com"));
52
53 //设置邮件收件人地址
54
55 message.setRecipient(Message.RecipientType.TO, new InternetAddress("Pyl@l.com"));
56
57 //设置邮件主题
58
59 message.setSubject("hello!");
60
61
62
63 //4.正文设置
64
65 MimeBodyPart content = new MimeBodyPart();
66
67 //设置正文内容(第一种方法)
68
69 content.setContent("hello","text/html");
70
71 //设置正文内容(第二种方法)
72
73 content.setText("你好啊!", "utf-8");
74
75 /*注意:这里两种设置正文内容的方法不能同时使用*/
76
77
78
79 //5.描述关系
80
81 MimeMultipart mm = new MimeMultipart();
82
83 //在关系中加入正文
84
85 mm.addBodyPart(content);
86
87 //在邮件主体设置关系
88
89 message.setContent(mm);
90
91 //保存邮件的更改
92
93 message.saveChanges();
94
95 //在制定路径生成该邮件
96
97 message.writeTo(new FileOutputStream("G:\\1.eml"));
98
99 }
100
101 }
邮件呈现效果如下:
然后我们来创建第二封带有图片的邮件,源码如下:
View 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
10
11 import javax.activation.DataHandler;
12
13 import javax.activation.FileDataSource;
14
15 import javax.mail.Message;
16
17 import javax.mail.MessagingException;
18
19 import javax.mail.Session;
20
21 import javax.mail.internet.AddressException;
22
23 import javax.mail.internet.InternetAddress;
24
25 import javax.mail.internet.MimeBodyPart;
26
27 import javax.mail.internet.MimeMessage;
28
29 import javax.mail.internet.MimeMultipart;
30
31
32
33 public class MailImageTest {
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
52
53 /*3.设置邮件属性*/
54
55 //设置邮件发送人地址
56
57 message.setFrom(new InternetAddress("L@l.com"));
58
59 //设置邮件收件人地址
60
61 message.setRecipient(Message.RecipientType.TO, new InternetAddress("Pyl@l.com"));
62
63 //设置邮件主题
64
65 message.setSubject("hello!");
66
67
68
69 //4.正文设置
70
71 MimeBodyPart content = new MimeBodyPart();
72
73 //设置正文内容并且加上引用图片的html标签
74
75 content.setContent("哈哈、这是啥哇!<img src='cid:xx.png'>","text/html;charset=utf-8");
76
77 /*正文中添加图片是由HTML标签来完成的,而其中的"cid:xx.png",是下文设置的标识*/
78
79
80
81 //5.添加图片
82
83 MimeBodyPart image = new MimeBodyPart();
84
85 //加入放在工程根目录下的图片
86
87 image.setDataHandler(new DataHandler(new FileDataSource("src\\1.png")));
88
89 //是指图片ID标识,以备让正文中的HTML标签引用
90
91 image.setContentID("xx.png");
92
93
94
95 //6.描述关系
96
97 MimeMultipart mm = new MimeMultipart();
98
99 //在关系中加入正文
100
101 mm.addBodyPart(content);
102
103 //在关系中加入图片
104
105 mm.addBodyPart(image);
106
107 //将提交关系设置为关系型
108
109 mm.setSubType("related");
110
111
112
113 //将关系加入邮件主题
114
115 message.setContent(mm);
116
117
118
119 //保存对邮件的更改
120
121 message.saveChanges();
122
123 //在制定路径下生成该邮件
124
125 message.writeTo(new FileOutputStream("G:\\2.eml"));
126
127 }
128
129 }
由于测试使用网易的闪电邮,因该软件问题图片未能正常显示,OutLook在其他机器中测试成功,再次就不再截图。