用JavaMailAPI編寫(xiě)可帶附件的郵件發(fā)送程序(轉(zhuǎn))

利用Sun公司提供的JavaMail API可以很方便的開(kāi)發(fā)郵件發(fā)送程序。也許你已經(jīng)可以利用它來(lái)發(fā)送一段簡(jiǎn)單的文本了,但想不想使你的程序像OUTLOOK一樣也能發(fā)送附件呢?本文在簡(jiǎn)單介紹了JavaMail之后,詳細(xì)講解了一段完整的送信的JavaBean及一個(gè)十分輕巧的servlet。


(沒(méi)有裝載JavaMail API的讀者,可以到此站點(diǎn)下載,并按照Readme.txt設(shè)置好ClassPath)


一、JavaMail中一些我們需要的類(lèi)


1.Properties


JavaMail需要Properties來(lái)創(chuàng)建一個(gè)session對(duì)象,其屬性值就是發(fā)送郵件的主機(jī),如:


Properties props = new Properties ();
props.put("mail.smtp.host", "smtp.xxxx.com");//可以換上你的smtp主機(jī)名,就像你在OutLook中設(shè)置smtp主機(jī)名一樣。



2.Session


所有的基于JavaMail的程序都至少需要一個(gè)或全部的對(duì)話(huà)目標(biāo)。


Session session = Session.getInstance(props, null);



3.MimeMessage


信息對(duì)象將把你所發(fā)送的郵件真實(shí)的反映出來(lái)。


MimeMessage msg = new MimeMessage(session);



4.Transport


郵件的發(fā)送是由Transport來(lái)完成的:


Transport.send(msg);



二、我們自己創(chuàng)建的可發(fā)送附件的類(lèi)


import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class Mail {
//定義發(fā)件人、收件人、主題等
String to="";
String from="";
String host="";
String filename="";
String subject="";
//用于保存發(fā)送附件的文件名的集合
Vector file = new Vector();
//做一個(gè)可以傳發(fā)件人等參數(shù)的構(gòu)造
public Mail (String to,String from,String smtpServer,String subject){
//初始化發(fā)件人、收件人、主題等
this.to=to;
this.from=from;
this.host=smtpServer;
this.subject=subject;
}
//該方法用于收集附件名
public void attachfile(String fname){
file.addElement(fname);
}
//開(kāi)始發(fā)送信件的方法
public boolean startSend(){
//創(chuàng)建Properties對(duì)象
Properties props = System.getProperties();
//創(chuàng)建信件//得到默認(rèn)的對(duì)話(huà)對(duì)象
Session session=Session.getDefaultInstance(props, null); try {
//創(chuàng)建一個(gè)消息,并初始化該消息的各項(xiàng)元素
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address={new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject(subject);
//后面的BodyPart將加入到此處創(chuàng)建的Multipart中
Multipart mp = new MimeMultipart();
//利用枚舉器方便的遍歷集合
Enumeration efile=file.elements();
//檢查序列中是否還有更多的對(duì)象
while(efile.hasMoreElements()){
MimeBodyPart mbp=new MimeBodyPart();
//選擇出每一個(gè)附件名
filename=efile .nextElement().toString();
//得到數(shù)據(jù)源
FileDataSource fds=new FileDataSource(filename);
//得到附件本身并至入BodyPart
mbp.setDataHandler(new DataHandler(fds));
//得到文件名同樣至入BodyPart
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
//移走集合中的所有元素
file.removeAllElements();
//Multipart加入到信件
msg.setContent(mp);
//設(shè)置信件頭的發(fā)送日期
msg.setSentDate(new Date());
//發(fā)送信件
Transport.send(msg);
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex=mex.getNextException())!=null){
ex.printStackTrace();
}
return false;
}
return true;
}
}



三、一個(gè)簡(jiǎn)單的servlet


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SendMail extends
HttpServlet implements SingleThreadModel{
public void init(ServletConfig Conf)
throws ServletException {
super.init(Conf);
}
public void doPost(HttpServletRequest
Req, HttpServletResponse Res)
throws ServletException, IOException {
try{
//實(shí)例化剛才我們做的類(lèi),并按其構(gòu)造傳進(jìn)相應(yīng)的參數(shù)
Mail sendmail=newMail("zhang@263.net",
"chtwoy@21cn.com","smtp.21cn.com","test");
sendmail.attachfile("table.pdf");
sendmail.startSend();
}catch(Exception e){
e.printStackTrace();
}
}
public void destroy() {
}
}



四、小結(jié)


至此,你已經(jīng)可以在郵件中添加附件了,而且可以是多個(gè)。像這樣,將響應(yīng)與邏輯相分離對(duì)代碼的擴(kuò)展和維護(hù)是相當(dāng)有好處的。若Beans與servlet不在同一個(gè)包下,別忘了“import”。


為推出更好的文章請(qǐng)支持本站文章評(píng)比!


摘自“Java家” http://www.javajia.com
歡迎轉(zhuǎn)載,但請(qǐng)保留文章出處[@more@]

本文題目:用JavaMailAPI編寫(xiě)可帶附件的郵件發(fā)送程序(轉(zhuǎn))
本文鏈接:http://muchs.cn/article30/gephso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站App設(shè)計(jì)、服務(wù)器托管、網(wǎng)站營(yíng)銷(xiāo)、定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)