邮件工具类
有一个好的工具,会让你的开发事半功倍。再将讲这个工具类之前,我先给小白补充一点电子邮件工作原理及主要协议,我们要内外兼修,你说好不好!
1.电子邮件的工作原理
Internet电子邮件系统是基于客户机/服务器方式,客户端也叫用户代理(User Agent),提供用户界面,负载邮件发送的准备工作,如邮件的起草、编辑以及向服务器发送邮件或从服务器取邮件等。服务器端也叫传输代理(Message Transfer Agent),负责邮件的传输,它采用端到端的传输的传输方式,源端主机参与邮件传输的全过程。邮件的发送和接收过程主要分为3步:
(1)当用户需要发送电子邮件时,首先利用客户端的电子邮件应用程序按规定格式起草、编辑一封邮件,指明收件人的电子邮件地址,然后利用SMTP将邮件送往发送端的邮件服务器。
(2)发送端的邮件服务器接收到用户送来的邮件后,接收件人地址中的邮件服务器主机名,通过SMTP将邮件送到接收端的邮件服务器,接收端的邮件服务器根据收件人地址中的账号将邮件投递到对应的邮箱中。
(3)利用POP3协议或IMAP,接收端的用户可以在任何时间、地址利用电子邮件应用程序从自己的邮箱中读取邮件,并对自己的邮件进行管理。
2.电子邮件协议
电子邮件在发送和接收的过程中还要遵循一些基本协议和标准,这些协议主要有SMTP、POP3、IMAP、MIME等。
(1)SMTP协议
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是Internet上基于TCP/IP的应用层协议,使用于主机与主机之间的电子邮件交换。SMTP的特点是简单,它只定义了邮件发送方和接收方之间的连接传输,将电子邮件由一台计算机传送到另一台计算机,而不规定其他任何操作,如用户界面的交互、邮件的接收、邮件存储等。Internet上几乎所有主机都运行着遵循SMTP的电子邮件软件,因此使用非常普通。另一方面,SMTP由于简单,因而有其一定的局限性,它只能传送ASCII文本文件,而对于一些二进制数据文件需要进行编码后才能传送。
(2)POP3协议和IMAP协议
电子邮件用户要从邮件服务器读取或下载邮件时必须要有邮件读取协议。现在常用的邮件读取协议有两个,一个是邮局协议的第三版本(POP3,Post Office Protocol Version 3),另一个是因特网报文存取协议(IMAP,Internet Message Access Protocol)。
POP3是一个非常简单、但功能有限的邮件读取协议,大多数ISP都支持POP3。当邮件用户将邮件接收软件设定为POP3阅读电子邮件时,每当使用者要阅读电子邮件时,它都会把所有信件内容下载至使用者的计算机,此外,他可选择把邮件保留在邮件服务器上或是不保留邮件在服务器上。而IMAP是另一种邮件读取协议,当邮件用户将邮件接收设定IMAP阅读电子邮件时,它并不会把所有邮件内容下载至计算机,而只下载邮件的主题等信息。
(3)多途径Internet邮件扩展协议
多用途Internet邮件扩展协议(MIME,Multipose Internet Mail Extensions)是一种编码标准,它解决了SMTP只能传送ASCII文本的限制。MIME定义了各种类型数据,如声音、图像、表格、二进制数据等的编码格式,通过对这些类型的数据编码并将它们作为邮件中的附件进行处理,以保证这些部分内容完整、正确地传输。因此,MIME增强了SMTP的传输功能,统一了编码规范。
********************************************************************************************************************************************************
看到这里,邮件服务的基础想必大家都应该清楚了。接下来,我给大家讲解一下封装的邮件工具类。
1 /**
2 *发送邮件需要使用的基本信息
3 *
4 */
5 import java.util.Properties;
6
7 public class MailBody {
8 // 发送邮件的服务器的IP和端口
9 private String mailServerHost;
10 private String mailServerPort = "25";
11 // 邮件发送者的地址
12 private String fromAddress;
13 // 邮件接收者的地址
14 private String toAddress;
15 // 登陆邮件发送服务器的用户名和密码
16 private String userName;
17 private String password;
18 // 是否需要身份验证
19 private boolean validate = false;
20 // 邮件主题
21 private String subject;
22 // 邮件的文本内容
23 private String content;
24 // 邮件附件的文件名
25 private String[] attachFileNames;
26 /**
27 * 获得邮件会话属性
28 */
29 public Properties getProperties(){
30 Properties p = new Properties();
31 p.put("mail.smtp.host", this.mailServerHost);
32 p.put("mail.smtp.port", this.mailServerPort);
33 p.put("mail.smtp.auth", validate ? "true" : "false");
34 return p;
35 }
36 public String getMailServerHost() {
37 return mailServerHost;
38 }
39 public void setMailServerHost(String mailServerHost) {
40 this.mailServerHost = mailServerHost;
41 }
42 public String getMailServerPort() {
43 return mailServerPort;
44 }
45 public void setMailServerPort(String mailServerPort) {
46 this.mailServerPort = mailServerPort;
47 }
48 public boolean isValidate() {
49 return validate;
50 }
51 public void setValidate(boolean validate) {
52 this.validate = validate;
53 }
54 public String[] getAttachFileNames() {
55 return attachFileNames;
56 }
57 public void setAttachFileNames(String[] fileNames) {
58 this.attachFileNames = fileNames;
59 }
60 public String getFromAddress() {
61 return fromAddress;
62 }
63 public void setFromAddress(String fromAddress) {
64 this.fromAddress = fromAddress;
65 }
66 public String getPassword() {
67 return password;
68 }
69 public void setPassword(String password) {
70 this.password = password;
71 }
72 public String getToAddress() {
73 return toAddress;
74 }
75 public void setToAddress(String toAddress) {
76 this.toAddress = toAddress;
77 }
78 public String getUserName() {
79 return userName;
80 }
81 public void setUserName(String userName) {
82 this.userName = userName;
83 }
84 public String getSubject() {
85 return subject;
86 }
87 public void setSubject(String subject) {
88 this.subject = subject;
89 }
90 public String getContent() {
91 return content;
92 }
93 public void setContent(String textContent) {
94 this.content = textContent;
95 }
96 }
1 /**
2 * mail 密码验证器
3 */
4 import javax.mail.*;
5
6 public class MailAuthenticator extends Authenticator{
7 String userName=null;
8 String password=null;
9
10 public MailAuthenticator(){
11 }
12 public MailAuthenticator(String username, String password) {
13 this.userName = username;
14 this.password = password;
15 }
16 protected PasswordAuthentication getPasswordAuthentication(){
17 return new PasswordAuthentication(userName, password);
18 }
19 }
1 /**
2 * 简单邮件(不带附件的邮件)发送器
3 */
4 import java.util.Date;
5 import java.util.Properties;
6
7 import javax.mail.Address;
8 import javax.mail.BodyPart;
9 import javax.mail.Message;
10 import javax.mail.Multipart;
11 import javax.mail.Session;
12 import javax.mail.Transport;
13 import javax.mail.internet.InternetAddress;
14 import javax.mail.internet.MimeBodyPart;
15 import javax.mail.internet.MimeMessage;
16 import javax.mail.internet.MimeMultipart;
17
18
19 public class MailSendUtils {
20
21 /**
22 * 以文本格式发送邮件
23 * @param mailInfo 待发送的邮件的信息
24 */
25 public boolean sendTextMail(MailBody mailInfo) throws Exception{
26 // 判断是否需要身份认证
27 MailAuthenticator authenticator = null;
28 Properties pro = mailInfo.getProperties();
29 if (mailInfo.isValidate()) {
30 // 如果需要身份认证,则创建一个密码验证器
31 authenticator = new MailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
32 }
33 // 根据邮件会话属性和密码验证器构造一个发送邮件的session
34 Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
35 // logBefore(logger, "构造一个发送邮件的session");
36
37 // 根据session创建一个邮件消息
38 Message mailMessage = new MimeMessage(sendMailSession);
39 // 创建邮件发送者地址
40 Address from = new InternetAddress(mailInfo.getFromAddress());
41 // 设置邮件消息的发送者
42 mailMessage.setFrom(from);
43 // 创建邮件的接收者地址,并设置到邮件消息中
44 Address to = new InternetAddress(mailInfo.getToAddress());
45 mailMessage.setRecipient(Message.RecipientType.TO,to);
46 // 设置邮件消息的主题
47 mailMessage.setSubject(mailInfo.getSubject());
48 // 设置邮件消息发送的时间
49 mailMessage.setSentDate(new Date());
50 // 设置邮件消息的主要内容
51 String mailContent = mailInfo.getContent();
52 mailMessage.setText(mailContent);
53 // 发送邮件
54 Transport.send(mailMessage);
55 System.out.println("发送成功!");
56 return true;
57 }
58
59 /**
60 * 以HTML格式发送邮件
61 * @param mailInfo 待发送的邮件信息
62 */
63 public boolean sendHtmlMail(MailBody mailInfo) throws Exception{
64 // 判断是否需要身份认证
65 MailAuthenticator authenticator = null;
66 Properties pro = mailInfo.getProperties();
67 //如果需要身份认证,则创建一个密码验证器
68 if (mailInfo.isValidate()) {
69 authenticator = new MailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
70 }
71 // 根据邮件会话属性和密码验证器构造一个发送邮件的session
72 Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
73
74 // 根据session创建一个邮件消息
75 Message mailMessage = new MimeMessage(sendMailSession);
76 // 创建邮件发送者地址
77 Address from = new InternetAddress(mailInfo.getFromAddress());
78 // 设置邮件消息的发送者
79 mailMessage.setFrom(from);
80 // 创建邮件的接收者地址,并设置到邮件消息中
81 Address to = new InternetAddress(mailInfo.getToAddress());
82 // Message.RecipientType.TO属性表示接收者的类型为TO
83 mailMessage.setRecipient(Message.RecipientType.TO,to);
84 // 设置邮件消息的主题
85 mailMessage.setSubject(mailInfo.getSubject());
86 // 设置邮件消息发送的时间
87 mailMessage.setSentDate(new Date());
88 // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
89 Multipart mainPart = new MimeMultipart();
90 // 创建一个包含HTML内容的MimeBodyPart
91 BodyPart html = new MimeBodyPart();
92 // 设置HTML内容
93 html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
94 mainPart.addBodyPart(html);
95 // 将MiniMultipart对象设置为邮件内容
96 mailMessage.setContent(mainPart);
97 // 发送邮件
98 Transport.send(mailMessage);
99 return true;
100 }
101
102 /**
103 * @param SMTP
104 * 邮件服务器
105 * @param PORT
106 * 端口
107 * @param EMAIL
108 * 本邮箱账号
109 * @param PAW
110 * 本邮箱密码
111 * @param toEMAIL
112 * 对方箱账号
113 * @param TITLE
114 * 标题
115 * @param CONTENT
116 * 内容
117 * @param TYPE
118 * 1:文本格式;2:HTML格式
119 */
120 public static boolean sendEmail(String SMTP, String PORT, String EMAIL,
121 String PAW, String toEMAIL, String TITLE, String CONTENT,
122 String TYPE) {
123
124 // 这个类主要是设置邮件
125 MailBody mailInfo = new MailBody();
126
127 mailInfo.setMailServerHost(SMTP);
128 mailInfo.setMailServerPort(PORT);
129 mailInfo.setValidate(true);
130 mailInfo.setUserName(EMAIL);
131 mailInfo.setPassword(PAW);
132 mailInfo.setFromAddress(EMAIL);
133 mailInfo.setToAddress(toEMAIL);
134 mailInfo.setSubject(TITLE);
135 mailInfo.setContent(CONTENT);
136 // 这个类主要来发送邮件
137
138 MailSendUtils sms = new MailSendUtils();
139 try {
140 if ("1".equals(TYPE)) {
141 return sms.sendTextMail(mailInfo);
142 } else {
143 return sms.sendHtmlMail(mailInfo);
144 }
145 } catch (Exception e) {
146 return false;
147 }
148
149 }
150
151
152 }
转载请注明出处!
http://www.cnblogs.com/libingbin/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。