到目前为止,我们在前面的章节中主要使用了INBOX文件夹.这是大多数邮件所在的默认文件夹.有些系统可能将其称为INBOX,而另一些系统可能会将其称为其他名称.但是,您始终可以使用名称INBOX从JavaMail API访问它.
JavaMail API将文件夹表示为抽象Folder类的实例:
public abstract class Folder extends Object
此类声明从服务器请求命名文件夹,从文件夹中删除邮件的方法,搜索文件夹中的特定邮件,列出文件夹中的邮件等.
打开文件夹
我们无法创建文件夹直接作为 Folder 类中唯一的构造函数是 protected .我们可以从以下网址获取文件夹:
会话
商店
或其他文件夹
以上所有类都有类似签名的getFolder()方法:
public abstract Folder getFolder(String name) throws MessagingException
有助于获取 Folder 对象的一些方法是:
方法 | 描述 |
---|---|
boolean exists() | 检查文件夹是否真的存在.在获取Folder对象之前使用此方法. |
abstract void open (int 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 () | 返回分隔的分隔符此文件夹的路径名来自直接子文件夹的名称. |
管理文件夹
以下是一些有助于管理文件夹的方法:
方法 | 描述 |
---|---|
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 (文件夹f) | 这会更改此文件夹的名称.必须关闭文件夹才能重命名.否则,抛出IllegalStateException. |
管理文件夹中的消息
以下是一些帮助管理文件夹中的消息的方法:
Method | 描述 |
---|---|
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(字符串模式) | 这类似于 list()方法,但它允许您指定 模式.模式是一个字符串,给出匹配的文件夹的名称. |
Folder [] listSubscribed (字符串模式) | 这类似于 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[] getMessages (int [] messageNumbers) | 这将返回一个数组,该数组仅包含 messageNumbers 数组中由number专门标识的那些消息. |
void fetch (Message []messages,FetchProfile fp) | 预取FetchProfile中为给定消息指定的项目. FetchProfile参数指定要预取的消息中的哪些标题. |
搜索文件夹
如果服务器支持搜索(许多IMAP服务器都可以,大多数POP服务器都不支持),在文件夹中搜索符合特定条件的邮件很容易.标准在SearchTerm对象中编码.以下是两种搜索方法:
方法 | 描述 |
---|---|
Message[] search(SearchTerm term) | 在此文件夹中搜索与指定搜索条件匹配的邮件.返回包含匹配消息的数组.如果没有找到匹配项,则返回一个空数组. |
Message[] search(SearchTerm term,Message [] messages) | 在给定的消息数组中搜索与指定搜索条件匹配的消息.返回包含匹配消息的数组.如果未找到匹配项,则返回空数组.指定的Message对象必须属于此文件夹. |
标志
标记修改很有用当您需要更改文件夹中整个邮件集的标志时.以下是Folder类中提供的方法:
Method | 描述 |
---|---|
void setFlags (Message []messages,Flags flag,boolean value) | 在数组中指定的消息上设置指定的标志. |
void setFlags (int start,int end,Flags flag,boolean value) | 设置从开始到结束编号的消息上的指定标志,包括起点和终点. |
void setFlags (int [] messageNumbers,Flags flag,boolean value) | 设置消息号在数组中的消息的指定标志. |
abstract Flags getPermanentFlags () | 返回此文件夹支持所有邮件的标志. |