先還是看一段程序后,再一一講解其內容吧
public class ReadMail
{
//初始化主機
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協議也可以使用IMAP
Stroe store=session.getStore(“pop3”);
//連接到郵件服務器
store.connect(host,username,password);
//獲取該用Floder對,并以只讀方式打開
Folder folder=store.getFolder(“INBOX”);
Folder.open(Folder.READ_ONLY);
//檢索所有郵件,按需填充
Message msg[]=folder.getMessage();
//遍歷每一個郵件
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
For(int i=0,n=msg.length;I<n;I++)
{
//打印每個郵件的發件人和主題
System.out.println(I+”:”+msg[i].getFrom()[0]+”\t”+msg[i].getSubject());
//顯示消息內容
msg[i].writeTo(System.out);
}
floder.close(false);
store.close();
}
}
現在對程序一一講解吧!
Store是一個抽象類,它模擬了消息存儲器(或稱為消息數據庫)及其內部目錄(Folder)訪問協議,以存儲和讀取消息,由其子類提供具體實現。客戶程序可以通過獲取一個Store對象來訪問消息存儲器,以絕大多數的存儲器要求用戶在訪問前提供認證信息,connect方法執行了該認證過程。與Transport類似,也可以指定Store使用協議。郵件是讀取郵件所以用pop3協議來讀取。
具體如:Store store=new Store(“pop3”);
然后認證:store.connect(host,username,pwd)
javax.mail.Folder類,它是一個抽象類,用于分級組織郵件,其子類提供針對具本協議的實現。存儲在目錄內的消息被順序計數(從1開始到消息總數),該順序被稱為郵箱順序,郵件順序的改變消息的序列號,這種情況僅發生在客戶程序調用Expunge方法擦除目錄內設置了Flags.Flag.DELETED標志位的消息時。執行擦除操作后,目錄內消息將重新編號。客戶程序可以通過消息序列號和直接通過相應的Message對象引用目錄中的對象,由于消息序列號會在會話中很可能會改變,因此應盡可能保存Message對象來引用對象。
連接stroe之后,接一來就可以獲取一個文件夾(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()獲得內容,或者用writeTo()將內容寫入輸出流。GetContent()方法只能得到消息內容,而writeTo()輸出卻包含消息頭.
如下兩種方試
System.out.println(((MimeMessage)msg).getContent());
Msg.writeTo(System.out);
讀完郵件后要關閉與Folder和Store的連接
folder.close(false);
stroe.close();