使用JavaMail發送郵件需要用到mail.jar和activtion.jar兩個包。
該類實現了較完整的郵件發送功能,包括以HTML格式發送,添加附件和抄送人。下面是具體的代碼:
package?cn.cgw.util.mail;?import?java.util.Properties;?
import?javax.activation.DataHandler;?
import?javax.activation.FileDataSource;?
import?javax.mail.Address;?
import?javax.mail.BodyPart;?
import?javax.mail.Message;?
import?javax.mail.Multipart;?
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;?
public?class?Mail?{
private?MimeMessage?mimeMsg;?//MIME郵件對象
private?Session?session;?//郵件會話對象
private?Properties?props;?//系統屬性
private?boolean?needAuth?=?false;?//smtp是否需要認證
//smtp認證用戶名和密碼
private?String?username;
private?String?password;
private?Multipart?mp;?//Multipart對象,郵件內容,標題,附件等內容均添加到其中後再生成MimeMessage對象
/**?
*?Constructor? *?@param?smtp?郵件發送服務器? */?public?Mail(String?smtp){
setSmtpHost(smtp);
createMimeMessage();
}
/**?
*?設置郵件發送服務器? *?@param?hostName?String? */?public?void?setSmtpHost(String?hostName)?{
System.out.println("設置系統屬性:mail.smtp.host?=?"+hostName);
if(props?==?null)?
props?=?System.getProperties();?//獲得系統屬性對象
props.put("mail.smtp.host",hostName);?//設置SMTP主機
}
/**?
*?創建MIME郵件對象 *?@return? */?public?boolean?createMimeMessage()
{
try?{
System.out.println("準備獲取郵件會話對象!");
session?=?Session.getDefaultInstance(props,null);?//獲得郵件會話對象
}
catch(Exception?e){
System.err.println("獲取郵件會話對象時發生錯誤!"+e);
return?false;
}
System.out.println("準備創建MIME郵件對象!");
try?{
mimeMsg?=?new?MimeMessage(session);?//創建MIME郵件對象
mp?=?new?MimeMultipart();
return?true;
}?catch(Exception?e){
System.err.println("創建MIME郵件對象失敗!"+e);
return?false;
}
}?
/**?
*?設置SMTP是否需要驗證? *?@param?need? */?public?void?setNeedAuth(boolean?need)?{
System.out.println("設置smtp身份認證:mail.smtp.auth?=?"+need);
if(props?==?null)?props?=?System.getProperties();
if(need){
props.put("mail.smtp.auth","true");
}else{
props.put("mail.smtp.auth","false");
}
}
/**?
*?設置用戶名和密碼? *?@param?name? *?@param?pass? */?public?void?setNamePass(String?name,String?pass)?{
username?=?name;
password?=?pass;
}
/**?
*?設置郵件主題? *?@param?mailSubject? *?@return? */?public?boolean?setSubject(String?mailSubject)?{
System.out.println("設置郵件主題!");
try{
mimeMsg.setSubject(mailSubject);
return?true;
}
catch(Exception?e)?{
System.err.println("設置郵件主題發生錯誤!");
return?false;
}
}?
/**?
*?設置郵件正文? *?@param?mailBody?String? */public?boolean?setBody(String?mailBody)?{
try{
BodyPart?bp?=?new?MimeBodyPart();
bp.setContent(""+mailBody,"text/html;charset=GBK");
mp.addBodyPart(bp);
return?true;
}?catch(Exception?e){
System.err.println("設置郵件正文時發生錯誤!"+e);
return?false;
}
}
/**?
*?添加附件? *?@param?filename?String? */public?boolean?addFileAffix(String?filename)?{
System.out.println("增加郵件附件:"+filename);
try{
BodyPart?bp?=?new?MimeBodyPart();
FileDataSource?fileds?=?new?FileDataSource(filename);
bp.setDataHandler(new?DataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
return?true;
}?catch(Exception?e){
System.err.println("增加郵件附件:"+filename+"發生錯誤!"+e);
return?false;
}
}
/**?
*?設置發信人? *?@param?from?String? */public?boolean?setFrom(String?from)?{
System.out.println("設置發信人!");
try{
mimeMsg.setFrom(new?InternetAddress(from));?//設置發信人
return?true;
}?catch(Exception?e)?{
return?false;
}
}
/**?
*?設置收信人? *?@param?to?String? */public?boolean?setTo(String?to){
if(to?==?null)return?false;
try{
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
return?true;
}?catch(Exception?e)?{
return?false;
}?
}
/**?
*?設置抄送人? *?@param?copyto?String */public?boolean?setCopyTo(String?copyto)
{
if(copyto?==?null)return?false;
try{
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
return?true;
}
catch(Exception?e)
{?return?false;?}
}
/**?
*?發送郵件? */public?boolean?sendOut()
{
try{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在發送郵件....");
Session?mailSession?=?Session.getInstance(props,null);
Transport?transport?=?mailSession.getTransport("smtp");
transport.connect((String)props.get("mail.smtp.host"),username,password);
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
//transport.send(mimeMsg);
System.out.println("發送郵件成功!");
transport.close();
return?true;
}?catch(Exception?e)?{
System.err.println("郵件發送失敗!"+e);
return?false;
}
}
/**?
*?調用sendOut方法完成郵件發送? *?@param?smtp? *?@param?from? *?@param?to? *?@param?subject? *?@param?content? *?@param?username? *?@param?password? *?@return?boolean? */?public?static?boolean?send(String?smtp,String?from,String?to,String?subject,String?content,String?username,String?password)?{?
Mail?theMail?=?new?Mail(smtp);?
theMail.setNeedAuth(true);?//需要驗證?
if(!theMail.setSubject(subject))?return?false;?
if(!theMail.setBody(content))?return?false;?
if(!theMail.setTo(to))?return?false;?
if(!theMail.setFrom(from))?return?false;?
theMail.setNamePass(username,password);?
if(!theMail.sendOut())?return?false;?
return?true;?
}?
/**?
*?調用sendOut方法完成郵件發送,帶抄送? *?@param?smtp? *?@param?from? *?@param?to? *?@param?copyto? *?@param?subject? *?@param?content? *?@param?username? *?@param?password? *?@return?boolean? */?public?static?boolean?sendAndCc(String?smtp,String?from,String?to,String?copyto,String?subject,String?content,String?username,String?password)?{?
Mail?theMail?=?new?Mail(smtp);?
theMail.setNeedAuth(true);?//需要驗證?
if(!theMail.setSubject(subject))?return?false;?
if(!theMail.setBody(content))?return?false;?
if(!theMail.setTo(to))?return?false;?
if(!theMail.setCopyTo(copyto))?return?false;?
if(!theMail.setFrom(from))?return?false;?
theMail.setNamePass(username,password);?
if(!theMail.sendOut())?return?false;?
return?true;?
}?
/**?
*?調用sendOut方法完成郵件發送,帶附件? *?@param?smtp? *?@param?from? *?@param?to? *?@param?subject? *?@param?content? *?@param?username? *?@param?password? *?@param?filename?附件路徑? *?@return? */?public?static?boolean?send(String?smtp,String?from,String?to,String?subject,String?content,String?username,String?password,String?filename)?{?
Mail?theMail?=?new?Mail(smtp);?
theMail.setNeedAuth(true);?//需要驗證?
if(!theMail.setSubject(subject))?return?false;?
if(!theMail.setBody(content))?return?false;?
if(!theMail.addFileAffix(filename))?return?false;
if(!theMail.setTo(to))?return?false;?
if(!theMail.setFrom(from))?return?false;?
theMail.setNamePass(username,password);?
if(!theMail.sendOut())?return?false;?
return?true;?
}?
/**?
*?調用sendOut方法完成郵件發送,帶附件和抄送? *?@param?smtp? *?@param?from? *?@param?to? *?@param?copyto? *?@param?subject? *?@param?content? *?@param?username? *?@param?password? *?@param?filename? *?@return? */?public?static?boolean?sendAndCc(String?smtp,String?from,String?to,String?copyto,String?subject,String?content,String?username,String?password,String?filename)?{?
Mail?theMail?=?new?Mail(smtp);?
theMail.setNeedAuth(true);?//需要驗證?
if(!theMail.setSubject(subject))?return?false;?
if(!theMail.setBody(content))?return?false;?
if(!theMail.addFileAffix(filename))?return?false;
if(!theMail.setTo(to))?return?false;?
if(!theMail.setCopyTo(copyto))?return?false;?
if(!theMail.setFrom(from))?return?false;?
theMail.setNamePass(username,password);?
if(!theMail.sendOut())?return?false;?
return?true;?
}?
}