javamail總結(jié)經(jīng)驗(yàn)(二)
先還是看一段程序后,再一一講解其內(nèi)容吧public class ReadMail
{
//初始化主機(jī)
String host=”smtp.163.com”;
String nuserName=”郵箱的用戶名”;
String pwd=”用戶密碼”;
Session session;
Public void readMail()
{
Properties props=new Properties();
props.put(“mail.transport.protocol”,”smtp”);
props.put(“mail.smtp.host”,””+host+””);
props.put(“mail.smtp.port”,”25”);
session=Session.getDefaultInstance(props);
//獲取Store對象,使用pop3協(xié)議也可以使用IMAP
Stroe store=session.getStore(“pop3”);
//連接到郵件服務(wù)器
store.connect(host,username,password);
//獲取該用Floder對,并以只讀方式打開
Folder folder=store.getFolder(“INBOX”);
Folder.open(Folder.READ_ONLY);
//檢索所有郵件,按需填充
Message msg[]=folder.getMessage();
//遍歷每一個(gè)郵件
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
For(int i=0,n=msg.length;I<n;I++)
{
//打印每個(gè)郵件的發(fā)件人和主題
System.out.println(I+”:”+msg[i].getFrom()[0]+”\t”+msg[i].getSubject());
//顯示消息內(nèi)容
msg[i].writeTo(System.out);
}
floder.close(false);
store.close();
}
}
現(xiàn)在對程序一一講解吧!
Store是一個(gè)抽象類,它模擬了消息存儲器(或稱為消息數(shù)據(jù)庫)及其內(nèi)部目錄(Folder)訪問協(xié)議,以存儲和讀取消息,由其子類提供具體實(shí)現(xiàn)。客戶程序可以通過獲取一個(gè)Store對象來訪問消息存儲器,以絕大多數(shù)的存儲器要求用戶在訪問前提供認(rèn)證信息,connect方法執(zhí)行了該認(rèn)證過程。與Transport類似,也可以指定Store使用協(xié)議。郵件是讀取郵件所以用pop3協(xié)議來讀取。
具體如:Store store=new Store(“pop3”);
然后認(rèn)證:store.connect(host,username,pwd)
javax.mail.Folder類,它是一個(gè)抽象類,用于分級組織郵件,其子類提供針對具本協(xié)議的實(shí)現(xiàn)。存儲在目錄內(nèi)的消息被順序計(jì)數(shù)(從1開始到消息總數(shù)),該順序被稱為郵箱順序,郵件順序的改變消息的序列號,這種情況僅發(fā)生在客戶程序調(diào)用Expunge方法擦除目錄內(nèi)設(shè)置了Flags.Flag.DELETED標(biāo)志位的消息時(shí)。執(zhí)行擦除操作后,目錄內(nèi)消息將重新編號。客戶程序可以通過消息序列號和直接通過相應(yīng)的Message對象引用目錄中的對象,由于消息序列號會在會話中很可能會改變,因此應(yīng)盡可能保存Message對象來引用對象。
連接stroe之后,接一來就可以獲取一個(gè)文件夾(Folder)。該文件夾必須先使用open()方法打開,然后才能讀取里面的消息。
Folder folder=store.getDefaultFolder();
//或Folder folder=store.getFolder(“inbox”);
folder.open(Folder.READ_WRITE);
Message message[]=folder.getMessages();
Open()方法指定了要打開的文件及打開方試(如Folder.READ_WRITE)。Inbox是pop3惟一可以使用的文件夾。如果使用IMAP,還可以使用其它的文件夾。讀取了Message之后,就可以用getContent()獲得內(nèi)容,或者用writeTo()將內(nèi)容寫入輸出流。GetContent()方法只能得到消息內(nèi)容,而writeTo()輸出卻包含消息頭.
如下兩種方試
System.out.println(((MimeMessage)msg).getContent());
Msg.writeTo(System.out);
讀完郵件后要關(guān)閉與Folder和Store的連接
folder.close(false);
stroe.close();
posted on 2005-10-15 20:24 風(fēng) 閱讀(964) 評論(0) 編輯 收藏 所屬分類: 收藏