JavaMail API - 資料夾管理



到目前為止,我們在之前的章節中主要處理的是收件箱 (INBOX) 資料夾。這是大多數郵件所在的預設資料夾。有些系統可能將其稱為 INBOX,而其他系統可能將其稱為其他名稱。但是,您可以始終使用名稱 INBOX 透過 JavaMail API 訪問它。

JavaMail API 將資料夾表示為抽象 Folder 類的例項。

public abstract class Folder extends Object

此類聲明瞭用於從伺服器請求命名資料夾、從資料夾中刪除郵件、在資料夾中搜索特定郵件、列出資料夾中的郵件等的方法。

開啟資料夾

我們不能直接建立資料夾,因為Folder類中唯一的建構函式是protected。我們可以從以下物件獲取Folder

  • 會話 (Session)

  • 儲存 (Store)

  • 或其他資料夾

所有上述類都具有簽名類似的 getFolder() 方法。

public abstract Folder getFolder(String name) throws MessagingException

一些有助於獲取Folder物件的方法是:

方法描述
boolean exists()檢查資料夾是否存在。在獲取 Folder 物件之前使用此方法。
abstract void open(int mode)獲取Folder後,它處於關閉狀態。使用此方法開啟它。mode可以是Folder.READ_ONLY或Folder.READ_WRITE。
abstract boolean isOpen()如果資料夾已開啟,此方法返回true;如果已關閉,則返回false
abstract void close(boolean expunge)關閉資料夾。如果expunge引數為true,則資料夾中任何已刪除的郵件都將從伺服器上的實際檔案中刪除。否則,它們只是被標記為已刪除,但郵件仍然可以恢復。

基本資料夾資訊

以下是 Folder 類中一些返回有關資料夾基本資訊的方法:

方法描述
abstract String getName()返回資料夾的名稱,例如“TutorialsPoint Mail”。
abstract String getFullName()返回從根目錄開始的完整分層名稱,例如“books/Manisha/TutorialsPoint Mail”。
URLName getURLName()返回表示此資料夾的 URLName。
abstract Folder getParent()返回包含此資料夾的資料夾名稱,即父資料夾。例如,在之前的“TutorialsPoint Mail”示例中為“Manisha”。
abstract int getType()返回一個整數,指示資料夾是否可以包含郵件和/或其他資料夾。
int getMode()它返回兩個命名常量之一:Folder.READ_ONLY 或 Folder.READ_WRITE,或者在模式未知時返回 -1。
Store getStore()返回從中檢索此資料夾的 Store 物件。
abstract char getSeparator()返回分隔符字元,該字元將此 Folder 的路徑名與直接子資料夾的名稱分隔開。

管理資料夾

以下是幫助管理資料夾的一些方法:

方法描述
abstract boolean create(int type)這將在此資料夾的 Store 中建立一個新資料夾。其中type將是:Folder.HOLDS_MESSAGES 或 Folder.HOLDS_FOLDERS。如果資料夾成功建立,則返回true;否則返回false
abstract boolean delete(boolean recurse)只有當資料夾關閉時,此方法才會刪除資料夾。否則,它將丟擲IllegalStateException異常。如果recursetrue,則會刪除子資料夾。
abstract boolean renameTo(Folder f)這將更改此資料夾的名稱。必須關閉資料夾才能重新命名。否則,將丟擲 IllegalStateException 異常。

管理資料夾中的郵件

以下是幫助管理資料夾中郵件的一些方法:

方法描述
abstract void appendMessages(Message[] messages)顧名思義,陣列中的郵件將放在此資料夾的末尾。
void copyMessages(Message[] messages, Folder destination)這會將郵件從此資料夾複製到指定為引數的資料夾中。
abstract Message[] expunge()要從資料夾中刪除郵件,請將其 Flags.Flag.DELETED 標誌設定為 true。要從資料夾中物理刪除已刪除的郵件,您必須呼叫此方法。

列出資料夾的內容

有四種方法可以列出資料夾包含的資料夾:

方法描述
Folder[] list()這將返回一個數組,其中列出了此資料夾包含的資料夾。
Folder[] listSubscribed()這將返回一個數組,其中列出了此資料夾包含的所有已訂閱的資料夾。
abstract Folder[] list(String pattern)這類似於list()方法,只不過它允許您指定一個模式。該模式是一個字串,用於指定與之匹配的資料夾的名稱。
Folder[] listSubscribed(String pattern)這類似於listSubscribed()方法,只不過它允許您指定一個模式。該模式是一個字串,用於指定與之匹配的資料夾的名稱。

檢查郵件

方法描述
abstract int getMessageCount()此方法可以在開啟或關閉的資料夾上呼叫。但是,對於關閉的資料夾,此方法可能會(也可能不會)返回 -1,以指示郵件的確切數量不容易獲得。
abstract boolean hasNewMessages()自從上次開啟資料夾以來,如果向資料夾中添加了新郵件,則此方法返回true
int getNewMessageCount()它透過檢查資料夾中設定了 RECENT 標誌的郵件來返回新的郵件計數。
int getUnreadMessageCount()這可以在開啟或關閉的資料夾上呼叫。但是,對於關閉的資料夾,它可能會返回 -1,以指示獲取真實答案的成本太高。

從資料夾中獲取郵件

Folder 類提供了四種方法來從開啟的資料夾中檢索郵件:

方法描述
abstract Message getMessage(int messageNumber)這將返回資料夾中的第 n 條郵件。資料夾中的第一條郵件編號為 1。
Message[] getMessages()這將返回一個Message物件陣列,表示此資料夾中的所有郵件。
Message[] getMessages(int start, int end)這將返回資料夾中從 start 開始到 end 結束(包含 start 和 end)的Message物件陣列。
Message[] getMessages(int[] messageNumbers)這將返回一個數組,其中僅包含messageNumbers陣列中按編號特別標識的郵件。
void fetch(Message[] messages, FetchProfile fp)預取給定郵件中 FetchProfile 中指定的專案。FetchProfile 引數指定要預取郵件中的哪些標頭。

搜尋資料夾

如果伺服器支援搜尋(許多 IMAP 伺服器支援,而大多數 POP 伺服器不支援),則可以輕鬆地搜尋滿足特定條件的郵件的資料夾。這些條件編碼在 SearchTerm 物件中。以下是兩種搜尋方法:

方法描述
Message[] search(SearchTerm term)搜尋此資料夾中與指定的搜尋條件匹配的郵件。返回一個包含匹配郵件的陣列。如果未找到匹配項,則返回一個空陣列。
Message[] search(SearchTerm term, Message[] messages)搜尋給定的郵件陣列中與指定搜尋條件匹配的郵件。返回一個包含匹配郵件的陣列。如果未找到匹配項,則返回一個空陣列。指定的 Message 物件必須屬於此資料夾。

標誌

當您需要更改資料夾中整套郵件的標誌時,標誌修改非常有用。以下是 Folder 類中提供的方法:

方法描述
void setFlags(Message[] messages, Flags flag, boolean value)設定陣列中指定的郵件的指定標誌。
void setFlags(int start, int end, Flags flag, boolean value)設定編號從 start 到 end(包含 start 和 end)的郵件的指定標誌。
void setFlags(int[] messageNumbers, Flags flag, boolean value)設定郵件號位於陣列中的郵件的指定標誌。
abstract Flags getPermanentFlags()返回此資料夾支援的所有郵件的標誌。
廣告
© . All rights reserved.