1. 程式人生 > >java 程式碼實現163郵箱傳送郵件到QQ郵箱

java 程式碼實現163郵箱傳送郵件到QQ郵箱

1.建立一個使用者類,來接收發送郵件的郵箱地址和授權密碼(需要注意的是,這裡的密碼不是正常使用郵箱的登陸密碼,而是客戶端生成的另一個專門的授權碼   ,這裡需要開啟相應的傳送郵件的服務,這裡開啟的是pop3/smtp服務)

package appsoft.cd.applications.cd_gcxm.web;



import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


class MailAuthenticator extends Authenticator {      
/** 使用者名稱    */
private String username;
/**  密碼    */ 
private String password;   
/*  
*  建立一個新的例項 MailAuthenticator.  
* @param username  
* @param password    */ 
public MailAuthenticator(String username, String password) {
  this.username = username;
           this.password = password;   
     }     
public String getPassword() {   
return password;  
}      
@Override 
protected PasswordAuthentication getPasswordAuthentication() {   
return new PasswordAuthentication(username, password);  
}   
public String getUsername() {  
return username;   }     
public void setPassword(String password) { 
this.password = password;   } 
public void setUsername(String username) {  
this.username = username;   }   

2.編寫相應的測試方法(這裡的傳送郵件的方法是帶有相應的附件的,只是做了本地測試,所有相應的郵箱地址都寫在了程式碼裡面,這裡可以根據需要自己靈活封裝讀取做變動),具體程式碼如下:

package appsoft.cd.applications.cd_gcxm.web;


import java.util.Properties;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;  


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;  
import javax.mail.internet.MimeUtility;


public class SendToEmils {   
public static void main(String[] args) throws Exception {    // 配置資訊  
Properties properties = new Properties();  
properties.put("mail.smtp.host", "smtp.163.com");
    properties.put("mail.smtp.auth", "true");
    
// 根據郵件的會話屬性構造一個傳送郵件的Session,這裡需要注意的是使用者名稱那裡不能加字尾,否則便不是使用者名稱了  
//還需要注意的是,這裡的密碼不是正常使用郵箱的登陸密碼,而是客戶端生成的另一個專門的授權碼   
MailAuthenticator authenticator = new MailAuthenticator("郵箱地址",      "授權碼"); 
Session session = Session.getInstance(properties, authenticator);  
// 根據Session 構建郵件資訊 
Message message = new MimeMessage(session);
// 建立郵件傳送者地址  
Address from = new InternetAddress("郵箱地址"); 
    // 設定郵件訊息的傳送者   
message.setFrom(from);
// 驗證收件人郵箱地址  
List<String> toAddressList = new ArrayList<String>();
toAddressList.add("傳送的郵箱地址"); 
StringBuffer buffer = new StringBuffer();
if (!toAddressList.isEmpty()) {     
String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; 
Pattern p = Pattern.compile(regEx);
for (int i = 0; i < toAddressList.size(); i++) {  
Matcher match = p.matcher(toAddressList.get(i));
if (match.matches()) {
buffer.append(toAddressList.get(i));  
if (i < toAddressList.size() - 1) { 
buffer.append(",");    
}   
}    
}  
}    
String toAddress = buffer.toString(); 
if (!toAddress.isEmpty()) {    
// 建立郵件的接收者地址   
Address[] to = InternetAddress.parse(toAddress);
// 設定郵件接收人地址   
message.setRecipients(Message.RecipientType.TO, to);
// 郵件主題     
message.setSubject("這是測試的郵件");   
// 郵件容器    
MimeMultipart mimeMultiPart = new MimeMultipart();  
// 設定HTML    
BodyPart bodyPart = new MimeBodyPart();
// 郵件內容     
String htmlText = "測試的郵件傳送成功了"; 
bodyPart.setContent(htmlText, "text/html;charset=utf-8"); 
mimeMultiPart.addBodyPart(bodyPart);  
// 新增附件 
List<String> fileAddressList = new ArrayList<String>(); 
fileAddressList.add("E:\\Test\\附件檔名稱"); 
if (fileAddressList != null) {  
BodyPart attchPart = null; 
for (int i = 0; i < fileAddressList.size(); i++) { 
if (!fileAddressList.get(i).isEmpty()) {   
attchPart = new MimeBodyPart();       
// 附件資料來源        
FileDataSource source = new FileDataSource(      
fileAddressList.get(i));        
// 將附件資料來源新增到郵件體     
attchPart.setDataHandler(new DataHandler(source)); 
// 設定附件名稱為原檔名       
attchPart.setFileName(MimeUtility.encodeText(source.getName())); 
mimeMultiPart.addBodyPart(attchPart);    
}    
}     
}   


   message.setContent(mimeMultiPart); 
message.setSentDate(new Date());    
// 儲存郵件     
message.saveChanges();     
// 傳送郵件     
Transport.send(message);    
}   
}  
}

測試郵件傳送成功,這裡我是用163郵箱給QQ郵箱做的測試,測試是成功通過的,至此,傳送郵箱的方法介紹完畢,希望可以對廣大學習者有所幫助。