JavaMail - 文件夹管理
-
简述
到目前为止,我们在前面的章节中主要使用了 INBOX 文件夹。这是大多数邮件所在的默认文件夹。一些系统可能将其称为 INBOX,而另一些系统可能会用其他名称来称呼它。但是,您始终可以使用名称 INBOX 从 JavaMail API 访问它。JavaMail API 将文件夹表示为抽象 Folder 类的实例:public abstract class Folder extends Object
此类声明用于从服务器请求命名文件夹、从文件夹中删除邮件、在文件夹中搜索特定邮件、列出文件夹中的邮件等的方法。 -
打开文件夹
我们不能直接创建文件夹,因为Folder类中唯一的构造函数是protected。我们可以从以下位置获取文件夹:-
Session
-
Store
-
Folder
以上所有类都有一个类似的 getFolder() 方法,具有类似的签名:public abstract Folder getFolder(String name) throws MessagingException
有助于获取Folder对象的一些方法是:方法 描述 boolean exists() 检查文件夹是否真的存在。在获取 Folder 对象之前使用此方法。 abstract void open(int mode) 当你得到一个 Folder 时,它就关闭了。使用此方法打开它。模式可以是 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() 返回分隔此文件夹的路径名与直接子文件夹的名称的分隔符。 -
管理文件夹
以下是一些有助于管理文件夹的方法:方法 描述 abstract boolean create(int type) 这将在此文件夹的 Store 中创建一个新文件夹。凡类型是: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() 这将返回一个数组,列出该文件夹包含的所有订阅文件夹。 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) 这将返回文件夹中的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) 在给定的消息数组中搜索与指定搜索条件匹配的消息。返回一个包含匹配消息的数组。如果未找到匹配项,则返回一个空数组。指定的 Message 对象必须属于该文件夹。 -
旗帜
当您需要更改文件夹中整个邮件集的标志时,标志修改非常有用。以下是 Folder 类中提供的方法:方法 描述 void setFlags(Message[] 消息,Flags 标志,布尔值) 在数组中指定的消息上设置指定的标志。 void setFlags (int start, int end, Flags 标志, 布尔值) 在从开始到结束编号的消息上设置指定的标志,包括开始和结束。 void setFlags (int[] messageNumbers, Flags 标志, 布尔值) 在消息号在数组中的消息上设置指定的标志。 抽象标志getPermanentFlags () 返回此文件夹支持所有邮件的标志。