- JavaMail API 教程
- JavaMail - 首页
- JavaMail API - 概述
- JavaMail - 环境设置
- JavaMail - 核心类
- JavaMail - 发送邮件
- JavaMail - 检查邮件
- JavaMail - 获取邮件
- JavaMail - 身份验证
- JavaMail - 回复邮件
- JavaMail - 转发邮件
- JavaMail - 删除邮件
- JavaMail - Gmail SMTP 服务器
- JavaMail - 文件夹管理
- JavaMail - 配额管理
- JavaMail - 退回邮件
- JavaMail API 协议
- JavaMail - SMTP 服务器
- JavaMail - IMAP 服务器
- JavaMail - POP3 服务器
- JavaMail API 有用资源
- JavaMail - 快速指南
- JavaMail - 有用资源
- JavaMail - 讨论
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异常。如果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) | 这将返回文件夹中从 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() | 返回此文件夹支持的所有邮件的标志。 |
广告