您的位置:首页 > 编程语言 > Java开发

JavaMail 创建文件夹

2017-05-26 09:50 281 查看

前言:世上无难事,只要肯放弃!

最近有个需求,邮箱可以建立自己的文件夹,类似于“INBOX”,首先要理解什么是文件夹,下图是我对邮件服务器及文件夹的理解.

 






其中Store 见名知义,就是存储的意思,它就是存储邮件的邮件服务器,相当于Windows的本地C盘,D盘,里面有许多的文件夹,比如Store里咱们常用的“INBOX”收件箱,Drafts 草稿箱,Sent 已发送等,这个也需要注意,每个邮件服务器的文件夹名字不太一样,像比如QQ和网易的是草稿箱,而新浪的叫“草稿夹”,outlook的inbox还是小写的,这些咱们最好以对应的服务器为准,可以使用folder.list[]来获取对应的文件夹列表。

 言归正传,所以Store就相当于一个云盘,存储的是里面的邮件,所以,建立文件夹就简单了

  一 使用Store类

   Store的获取要使用到邮箱会话Session

Store store = imapSession.getStore("imaps");


 注意要使用“imaps”,使用“imap”会报错,可能建立文件夹对于邮件服务器来说需要加密安全进行数据传输吧.

 二 Folder类

 建立文件夹怎么能少了Folder这个关键的类

记得使用store.connect 连接到远程邮件服务器,然后获取默认的folder,一般是根目录下的默认folder

Folder folder = store.getDefaultFolder();


 三 查看API文档

getFolder

public abstract Folder getFolder(java.lang.String name)
throws MessagingException

Return the Folder object corresponding to the given name. Note that a Folder object is returned even if the named folder does not physically exist on the Store. The 
exists()
 method on
the folder object indicates whether this folder really exists.
Folder objects are not cached by the Store, so invoking this method on the same name multiple times will return that many distinct Folder objects.

Parameters:
name
 - The name of the Folder. In some Stores, name can be an absolute path if it starts with the hierarchy delimiter. Else it is interpreted relative to the 'root' of this namespace.

   谷歌翻译如下:

  返回与给定名称相对应的Folder对象。 请注意,即使命名文件夹在物理上不存在,也会返回Folder对象。 文件夹对象上的  exists()方法指示该文件夹是否真的存在。

 文件夹对象不被存储缓存,因此多次以相同的名称调用此方法将返回许多不同的Folder对象。

 这不就是创建文件夹的意思吗,而且已经做了去重的操作,有了就不会去创建了

 四 创建文件夹代码

1.将要创建的名为"folderName"的 文件夹"myFolder";
Folder myFolder = folder.getFolder(folderName);
2. 设置文件夹类型为“包含消息”并创建、该文件夹(类型可能是:Folder.HOLDS_MESSAGES 或 Folder.HOLDS_FOLDERS,即包含消息或包含文    件夹。返回true表示成功)
boolean isCreated = myFolder.create(Folder.HOLDS_MESSAGES);
3.给上述步骤加上监听,可以加个回调到我们主类进行业务操作
myFolder.addFolderListener(new FolderListener() {
@Override
public void folderRenamed(FolderEvent folderEvent) {
if(null != callBack){
callBack.renamed();
}
}
@Override
public void folderDeleted(FolderEvent folderEvent) {
if(null != callBack){
callBack.deleted();
}
}
@Override
public void folderCreated(FolderEvent folderEvent) {
if(null != callBack){
callBack.created();
}
}
});


 




 Tips: 上面两个分别是QQ邮箱和网易邮箱的效果,我记得我测试了不会出现重复创建的情况,这个时候也不会走回调的方法,isCreate = false,这个时候看怎么处理下业务逻辑,提示用户之类的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息