JavaMail API - 文件夹管理
到目前为止,我们在前面的章节中主要使用了 INBOX 文件夹。这是大多数邮件所在的默认文件夹。有些系统可能将其称为 INBOX,而有些系统可能将其称为其他名称。但是,您始终可以使用名称 INBOX 从 JavaMail API 访问它。
JavaMail API 将文件夹表示为抽象 Folder 类的实例:
public abstract class Folder extends Object
此类声明了从服务器请求命名文件夹、从文件夹中删除消息、在文件夹中搜索特定消息、在文件夹中列出消息等方法。
打开文件夹
我们无法直接创建文件夹,因为 Folder 类中唯一的构造函数是 protected。我们可以从以下位置获取 Folder:
会话
商店
或其他文件夹
所有上述类都具有类似的 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,指示文件夹是否可以包含消息和/或其他文件夹。 |
int getMode() | 返回两个命名常量之一 Folder.READ_ONLY 或 Folder.READ_WRITE,如果模式未知,则返回 -1。 |
Store getStore() | 返回从中检索此文件夹的 Store 对象。 |
abstract char getSeparator() | 返回将此 Folder 的路径名与直接子文件夹名称分隔开的分隔符。 |
管理文件夹
以下是一些有助于管理文件夹的方法:
方法 | 描述 |
---|---|
abstract boolean create(int type) | 这将在此文件夹的存储中创建一个新文件夹。其中 type 为:Folder.HOLDS_MESSAGES 或 Folder.HOLDS_FOLDERS。如果文件夹创建成功,则返回 true,否则返回 false。 |
abstract boolean delete(boolean recurse) | 仅当文件夹关闭时,才会删除文件夹。否则,它会抛出 IllegalStateException。如果 recurse 为 true,则删除子文件夹。 |
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() | 这将返回一个数组,列出此文件夹包含的所有订阅文件夹。 |
摘要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) | 这将返回文件夹中的 Message 对象数组,以 start 开始,以 end 结束(含)。 |
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) | 在给定的消息数组中搜索符合指定搜索条件的消息。返回包含匹配消息的数组。如果未找到匹配项,则返回一个空数组。指定的消息对象必须属于此文件夹。 |
标志
当您需要更改文件夹中整个消息集的标志时,标志修改非常有用。以下是 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() | 返回此文件夹支持的所有消息的标志。 |