javamail發送郵件的簡單實例 – JAVA編程語言程序開發技術文章

今天學習瞭一下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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *