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。如果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) 这将返回文件夹中的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 () 返回此文件夹支持所有邮件的标志。