今天學習瞭一下JavaMail,javamail發送郵件確實是一個比較麻煩的問題。為瞭以後使用方便,自己寫瞭段代碼,打成jar包,以方便以後使用。呵呵
以下三段代碼是我的全部代碼,朋友們如果想用,直接復制即可。
第一個類:MailSenderInfo.java
01
package com.util.mail;
02
/**
03
* 發送郵件需要使用的基本信息
04
*author by wangfun
05
*/
06
import java.util.Properties;
07
public class MailSenderInfo {
08
// 發送郵件的服務器的IP和端口
09
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
}
第二個類:SimpleMailSender.java
001
package com.util.mail;
002
003
import java.util.Date;
004
import java.util.Properties;
005
import javax.mail.Address;
006
import javax.mail.BodyPart;
007
import javax.mail.Message;
008
import javax.mail.MessagingException;
009
import javax.mail.Multipart;
010
import javax.mail.Session;
011
import javax.mail.Transport;
012
import javax.mail.internet.InternetAddress;
013
import javax.mail.internet.MimeBodyPart;
014
import javax.mail.internet.MimeMessage;
015
import javax.mail.internet.MimeMultipart;
016
017
/**
018
* 簡單郵件(不帶附件的郵件)發送器
019
*/
020
public class SimpleMailSender {
021
/**
022
* 以文本格式發送郵件
023
* @param mailInfo 待發送的郵件的信息
024
*/
025
public boolean sendTextMail(MailSenderInfo mailInfo) {
026
// 判斷是否需要身份認證
027
MyAuthenticator authenticator = null;
028
Properties pro = mailInfo.getProperties();
029
if (mailInfo.isValidate()) {
030
// 如果需要身份認證,則創建一個密碼驗證器
031
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
032
}
033
// 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
034
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
035
try {
036
// 根據session創建一個郵件消息
037
Message mailMessage = new MimeMessage(sendMailSession);
038
// 創建郵件發送者地址
039
Address from = new InternetAddress(mailInfo.getFromAddress());
040
// 設置郵件消息的發送者
041
mailMessage.setFrom(from);
042
// 創建郵件的接收者地址,並設置到郵件消息中
043
Address to = new InternetAddress(mailInfo.getToAddress());
044
mailMessage.setRecipient(Message.RecipientType.TO,to);
045
// 設置郵件消息的主題
046
mailMessage.setSubject(mailInfo.getSubject());
047
// 設置郵件消息發送的時間
048
mailMessage.setSentDate(new Date());
049
// 設置郵件消息的主要內容
050
String mailContent = mailInfo.getContent();
051
mailMessage.setText(mailContent);
052
// 發送郵件
053
Transport.send(mailMessage);
054
return true;
055
} catch (MessagingException ex) {
056
ex.printStackTrace();
057
}
058
return false;
059
}
060
061
/**
062
* 以HTML格式發送郵件
063
* @param mailInfo 待發送的郵件信息
064
*/
065
public static boolean sendHtmlMail(MailSenderInfo mailInfo){
066
// 判斷是否需要身份認證
067
MyAuthenticator authenticator = null;
068
Properties pro = mailInfo.getProperties();
069
//如果需要身份認證,則創建一個密碼驗證器
070
if (mailInfo.isValidate()) {
071
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
072
}
073
// 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
074
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
075
try {
076
// 根據session創建一個郵件消息
077
Message mailMessage = new MimeMessage(sendMailSession);
078
// 創建郵件發送者地址
079
Address from = new InternetAddress(mailInfo.getFromAddress());
080
// 設置郵件消息的發送者
081
mailMessage.setFrom(from);
082
// 創建郵件的接收者地址,並設置到郵件消息中
083
Address to = new InternetAddress(mailInfo.getToAddress());
084
// Message.RecipientType.TO屬性表示接收者的類型為TO
085
mailMessage.setRecipient(Message.RecipientType.TO,to);
086
// 設置郵件消息的主題
087
mailMessage.setSubject(mailInfo.getSubject());
088
// 設置郵件消息發送的時間
089
mailMessage.setSentDate(new Date());
090
// MiniMultipart類是一個容器類,包含MimeBodyPart類型的對象
091
Multipart mainPart = new MimeMultipart();
092
// 創建一個包含HTML內容的MimeBodyPart
093
BodyPart html = new MimeBodyPart();
094
// 設置HTML內容
095
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
096
mainPart.addBodyPart(html);
097
// 將MiniMultipart對象設置為郵件內容
098
mailMessage.setContent(mainPart);
099
// 發送郵件
100
Transport.send(mailMessage);
101
return true;
102
} catch (MessagingException ex) {
103
ex.printStackTrace();
104
}
105
return false;
106
}
107
}
第三個類:MyAuthenticator.java
01
package com.util.mail;
02
03
import javax.mail.*;
04
05
public class MyAuthenticator extends Authenticator{
06
String userName=null;
07
String password=null;
08
09
public MyAuthenticator(){
10
}
11
public MyAuthenticator(String username, String password) {
12
this.userName = username;
13
this.password = password;
14
}
15
protected PasswordAuthentication getPasswordAuthentication(){
16
return new PasswordAuthentication(userName, password);
17
}
18
}
下面給出使用上面三個類的代碼:
01
public static void main(String[] args){
02
//這個類主要是設置郵件
03
MailSenderInfo mailInfo = new MailSenderInfo();
04
mailInfo.setMailServerHost("smtp.163.com");
05
mailInfo.setMailServerPort("25");
06
mailInfo.setValidate(true);
07
mailInfo.setUserName("han2000lei@163.com");
08
mailInfo.setPassword("**********");//您的郵箱密碼
09
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("www.aiwalls.com");這兩句話。即如果你使用163smtp服務器,那麼發送郵件地址就必須用163的郵箱,如果不的話,是不會發送成功的。
5、關於javamail驗證錯誤的問題,網上的解釋有很多,但我看見的隻有一個。就是我的第三個類。你隻要復制全瞭代碼,我想是不會有問題的。
作者Quttap