JavaMail 創建文件夾

前言:世上無難事,只要肯放棄!

最近有個需求,郵箱可以建立自己的文件夾,類似於“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,這個時候看怎麼處理下業務邏輯,提示用戶之類的.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章