使用JavaMail完成邮件的编写
在编写测试之前我们需要做一下准备工作,其中需要的工具有:
- 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在其他机器中测试成功,再次就不再截图。
明天我会将邮件中添加多媒体文件与混合附件的方法与大家共同分享,敬请期待