古詩詞大全網 - 成語大全 - java 代碼發郵件怎麽添加附件

java 代碼發郵件怎麽添加附件

實現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);//

}

}