Javamail发送邮件的简单实例
今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。呵呵
以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。
第一个类:MailSenderInfo.java
1 package com.util.mail;
2
3 /** */
4 /**
5 * 发送邮件需要使用的基本信息
6 *author by wangfun
7 */
8 import java.util.Properties;
9
10 public class MailSenderInfo {
11 // 发送邮件的服务器的IP和端口
12 private String mailServerHost;
13 private String mailServerPort = "25";
14 // 邮件发送者的地址
15 private String fromAddress;
16 // 邮件接收者的地址
17 private String toAddress;
18 // 登陆邮件发送服务器的用户名和密码
19 private String userName;
20 private String password;
21 // 是否需要身份验证
22 private boolean validate = false;
23 // 邮件主题
24 private String subject;
25 // 邮件的文本内容
26 private String content;
27 // 邮件附件的文件名
28 private String[] attachFileNames;
29
30 /** */
31 /**
32 * 获得邮件会话属性
33 */
34 public Properties getProperties() {
35 Properties p = new Properties();
36 p.put("mail.smtp.host", this.mailServerHost);
37 p.put("mail.smtp.port", this.mailServerPort);
38 p.put("mail.smtp.auth", validate ? "true" : "false");
39 return p;
40 }
41
42 public String getMailServerHost() {
43 return mailServerHost;
44 }
45
46 public void setMailServerHost(String mailServerHost) {
47 this.mailServerHost = mailServerHost;
48 }
49
50 public String getMailServerPort() {
51 return mailServerPort;
52 }
53
54 public void setMailServerPort(String mailServerPort) {
55 this.mailServerPort = mailServerPort;
56 }
57
58 public boolean isValidate() {
59 return validate;
60 }
61
62 public void setValidate(boolean validate) {
63 this.validate = validate;
64 }
65
66 public String[] getAttachFileNames() {
67 return attachFileNames;
68 }
69
70 public void setAttachFileNames(String[] fileNames) {
71 this.attachFileNames = fileNames;
72 }
73
74 public String getFromAddress() {
75 return fromAddress;
76 }
77
78 public void setFromAddress(String fromAddress) {
79 this.fromAddress = fromAddress;
80 }
81
82 public String getPassword() {
83 return password;
84 }
85
86 public void setPassword(String password) {
87 this.password = password;
88 }
89
90 public String getToAddress() {
91 return toAddress;
92 }
93
94 public void setToAddress(String toAddress) {
95 this.toAddress = toAddress;
96 }
97
98 public String getUserName() {
99 return userName;
100 }
101
102 public void setUserName(String userName) {
103 this.userName = userName;
104 }
105
106 public String getSubject() {
107 return subject;
108 }
109
110 public void setSubject(String subject) {
111 this.subject = subject;
112 }
113
114 public String getContent() {
115 return content;
116 }
117
118 public void setContent(String textContent) {
119 this.content = textContent;
120 }
121 }
第二个类:SimpleMailSender.java
1 package com.util.mail;
2
3 import java.util.Date;
4 import java.util.Properties;
5 import javax.mail.Address;
6 import javax.mail.BodyPart;
7 import javax.mail.Message;
8 import javax.mail.MessagingException;
9 import javax.mail.Multipart;
10 import javax.mail.Session;
11 import javax.mail.Transport;
12 import javax.mail.internet.InternetAddress;
13 import javax.mail.internet.MimeBodyPart;
14 import javax.mail.internet.MimeMessage;
15 import javax.mail.internet.MimeMultipart;
16
17 /** */
18 /**
19 *
20 */
21 public class SimpleMailSender {
22 /** */
23 /**
24 * 以文本格式发送邮件
25 *
26 * @param mailInfo
27 * 待发送的邮件的信息
28 */
29 public boolean sendTextMail(MailSenderInfo mailInfo) {
30 // 判断是否需要身份认证
31 MyAuthenticator authenticator = null;
32 Properties pro = mailInfo.getProperties();
33 if (mailInfo.isValidate()) {
34 // 如果需要身份认证,则创建一个密码验证器
35 authenticator = new MyAuthenticator(mailInfo.getUserName(),
36 mailInfo.getPassword());
37 }
38 // 根据邮件会话属性和密码验证器构造一个发送邮件的session
39 Session sendMailSession = Session
40 .getDefaultInstance(pro, authenticator);
41 try {
42 // 根据session创建一个邮件消息
43 Message mailMessage = new MimeMessage(sendMailSession);
44 // 创建邮件发送者地址
45 Address from = new InternetAddress(mailInfo.getFromAddress());
46 // 设置邮件消息的发送者
47 mailMessage.setFrom(from);
48 // 创建邮件的接收者地址,并设置到邮件消息中
49 Address to = new InternetAddress(mailInfo.getToAddress());
50 mailMessage.setRecipient(Message.RecipientType.TO, to);
51 // 设置邮件消息的主题
52 mailMessage.setSubject(mailInfo.getSubject());
53 // 设置邮件消息发送的时间
54 mailMessage.setSentDate(new Date());
55 // 设置邮件消息的主要内容
56 String mailContent = mailInfo.getContent();
57 mailMessage.setText(mailContent);
58 // 发送邮件
59 Transport.send(mailMessage);
60 return true;
61 } catch (MessagingException ex) {
62 ex.printStackTrace();
63 }
64 return false;
65 }
66
67 /** */
68 /**
69 * 以HTML格式发送邮件
70 *
71 * @param mailInfo
72 * 待发送的邮件信息
73 */
74 public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
75 // 判断是否需要身份认证
76 MyAuthenticator authenticator = null;
77 Properties pro = mailInfo.getProperties();
78 // 如果需要身份认证,则创建一个密码验证器
79 if (mailInfo.isValidate()) {
80 authenticator = new MyAuthenticator(mailInfo.getUserName(),
81 mailInfo.getPassword());
82 }
83 // 根据邮件会话属性和密码验证器构造一个发送邮件的session
84 Session sendMailSession = Session
85 .getDefaultInstance(pro, authenticator);
86 try {
87 // 根据session创建一个邮件消息
88 Message mailMessage = new MimeMessage(sendMailSession);
89 // 创建邮件发送者地址
90 Address from = new InternetAddress(mailInfo.getFromAddress());
91 // 设置邮件消息的发送者
92 mailMessage.setFrom(from);
93 // 创建邮件的接收者地址,并设置到邮件消息中
94 Address to = new InternetAddress(mailInfo.getToAddress());
95 // Message.RecipientType.TO属性表示接收者的类型为TO
96 mailMessage.setRecipient(Message.RecipientType.TO, to);
97 // 设置邮件消息的主题
98 mailMessage.setSubject(mailInfo.getSubject());
99 // 设置邮件消息发送的时间
100 mailMessage.setSentDate(new Date());
101 // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
102 Multipart mainPart = new MimeMultipart();
103 // 创建一个包含HTML内容的MimeBodyPart
104 BodyPart html = new MimeBodyPart();
105 // 设置HTML内容
106 html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
107 mainPart.addBodyPart(html);
108 // 将MiniMultipart对象设置为邮件内容
109 mailMessage.setContent(mainPart);
110 // 发送邮件
111 Transport.send(mailMessage);
112 return true;
113 } catch (MessagingException ex) {
114 ex.printStackTrace();
115 }
116 return false;
117 }
118 }
第三个类:MyAuthenticator.java
package com.util.mail;
import javax.mail.*;
public class MyAuthenticator extends Authenticator {
String userName = null;
String password = null;
public MyAuthenticator() {
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
下面给出使用上面三个类的代码:
1 public static void main(String[] args){
2 //这个类主要是设置邮件
3 MailSenderInfo mailInfo = new MailSenderInfo();
4 mailInfo.setMailServerHost("smtp.163.com");
5 mailInfo.setMailServerPort("25");
6 mailInfo.setValidate(true);
7 mailInfo.setUserName("han2000lei@163.com");
8 mailInfo.setPassword("**********");//您的邮箱密码
9 mailInfo.setFromAddress("han2000lei@163.com");
10 mailInfo.setToAddress("han2000lei@163.com");
11 mailInfo.setSubject("设置邮箱标题 如http://www.guihua.org 中国桂花网");
12 mailInfo.setContent("设置邮箱内容 如http://www.guihua.org 中国桂花网 是中国最大桂花网站==");
13 //这个类主要来发送邮件
14 SimpleMailSender sms = new SimpleMailSender();
15 sms.sendTextMail(mailInfo);//发送文体格式
16 sms.sendHtmlMail(mailInfo);//发送html格式
17 }
最后,给出朋友们几个注意的地方:
1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");与mailInfo.setFromAddress("han2000lei@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。