實現java發送郵件的過程大體有以下幾步:
準備壹個properties文件,該文件中存放SMTP服務器地址等參數。
利用properties創建壹個Session對象
利用Session創建Message對象,然後設置郵件主題和正文
利用Transport對象發送郵件
需要的jar有2個:activation.jar和mail.jar發送附件,需要用到Multipart對象。
import?java.io.File;import?java.io.IOException;
import?java.io.InputStream;
import?java.util.Properties;
import?javax.activation.DataHandler;
import?javax.activation.DataSource;
import?javax.activation.FileDataSource;
import?javax.mail.BodyPart;
import?javax.mail.Message;
import?javax.mail.MessagingException;
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;
import?javax.mail.internet.MimeUtility;
public?class?JavaMailWithAttachment?{
private?MimeMessage?message;
private?Session?session;
private?Transport?transport;
private?String?mailHost?=?"";
private?String?sender_username?=?"";
private?String?sender_password?=?"";
private?Properties?properties?=?new?Properties();
/*
*?初始化方法 */public?JavaMailWithAttachment(boolean?debug)?{
InputStream?in?=?JavaMailWithAttachment.class.getResourceAsStream("MailServer.properties");
try?{
properties.load(in);
this.mailHost?=?properties.getProperty("mail.smtp.host");
this.sender_username?=?properties.getProperty("mail.sender.username");
this.sender_password?=?properties.getProperty("mail.sender.password");
}?catch?(IOException?e)?{
e.printStackTrace();
}
session?=?Session.getInstance(properties);
session.setDebug(debug);//?開啟後有調試信息
message?=?new?MimeMessage(session);
}
/**
*?發送郵件 *? *?@param?subject *郵件主題 *?@param?sendHtml *郵件內容 *?@param?receiveUser *收件人地址 *?@param?attachment *附件 */public?void?doSendHtmlEmail(String?subject,?String?sendHtml,?String?receiveUser,?File?attachment)?{
try?{
//?發件人
InternetAddress?from?=?new?InternetAddress(sender_username);
message.setFrom(from);
//?收件人
InternetAddress?to?=?new?InternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO,?to);
//?郵件主題
message.setSubject(subject);
//?向multipart對象中添加郵件的各個部分內容,包括文本內容和附件
Multipart?multipart?=?new?MimeMultipart();
//?添加郵件正文
BodyPart?contentPart?=?new?MimeBodyPart();
contentPart.setContent(sendHtml,?"text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);
//?添加附件的內容
if?(attachment?!=?null)?{
BodyPart?attachmentBodyPart?=?new?MimeBodyPart();
DataSource?source?=?new?FileDataSource(attachment);
attachmentBodyPart.setDataHandler(new?DataHandler(source));
//?網上流傳的解決文件名亂碼的方法,其實用MimeUtility.encodeWord就可以很方便的搞定
//?這裏很重要,通過下面的Base64編碼的轉換可以保證妳的中文附件標題名在發送時不會變成亂碼
//sun.misc.BASE64Encoder?enc?=?new?sun.misc.BASE64Encoder();
//messageBodyPart.setFileName("=?GBK?B?"?+?enc.encode(attachment.getName().getBytes())?+?"?=");
//MimeUtility.encodeWord可以避免文件名亂碼
attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
multipart.addBodyPart(attachmentBodyPart);
}
//?將multipart對象放到message中
message.setContent(multipart);
//?保存郵件
message.saveChanges();
transport?=?session.getTransport("smtp");
//?smtp驗證,就是妳用來發郵件的郵箱用戶名密碼
transport.connect(mailHost,?sender_username,?sender_password);
//?發送
transport.sendMessage(message,?message.getAllRecipients());
System.out.println("send?success!");
}?catch?(Exception?e)?{
e.printStackTrace();
}?finally?{
if?(transport?!=?null)?{
try?{
transport.close();
}?catch?(MessagingException?e)?{
e.printStackTrace();
}
}
}
}
public?static?void?main(String[]?args)?{
JavaMailWithAttachment?se?=?new?JavaMailWithAttachment(true);
File?affix?=?new?File("c:\\測試-test.txt");
se.doSendHtmlEmail("郵件主題",?"郵件內容",?"xxx@XXX.com",?affix);//
}
}