2016-03-04 103 views
1

如何使用IMAP协议和JavaMail阅读邮件收件箱,然后使用本地磁盘存储邮件。没有mstor的文档。 我尝试这种方式,但似乎MStorStore只是读取本地mbox,而不是根据在connect()函数中作为params传递的外部服务器创建和更新它。我收到错误:文件夹[收件箱]不存在。如何使用Java JavaMail创建mbox?

Session lSession = Session.getDefaultInstance(props); 
MStorStore lStore = new MStorStore(lSession , new URLName("mstor:c:/some_path/" + _mailModel.account.login)); 
lStore.connect(_mailModel.account.imap, _mailModel.account.login, _mailModel.account.password); 
Folder lInbox = lStore.getDefaultFolder().getFolder("Inbox"); 

问题是如何从javax.mail.Store创建我可以使用Mstor读取和更新的MBox。

+0

有一个快速浏览一下[MStorFolder(https://github.com/benfortuna/mstor/blob/master/src/main/java/net/fortuna/mstor/MStorFolder.java)可能以后有什么你正在寻找。 – SubOptimal

+0

不,MStorFolder扩展了java.mail.Folder,从我看到的只是从已经存在的文件夹读取 –

+0

[MStorFolder.create](https://github.com/benfortuna/mstor/blob/master/src/ main/java/net/fortuna/mstor/MStorFolder.java#L206)听起来像创建一个文件夹。如果它存在一个exceptioin'new MessagingException(“文件夹已经存在”)''会被抛出。听起来对我不坏。 – SubOptimal

回答

0

我不知道我是否回答正确的问题(或者回答一个问题),但是,这里是我在Scala程序中编写的一个方法,该程序需要一组javamail消息(通过imap获取)和使用MStorStore将它们写入我的项目根目录中名为“mbox”的目录中的新mbox文件。新文件被命名为“mboxName”参数中传递的任何内容。

def writeToMbox(messages: Array[Message], mboxName: String) {  
    val mProps = System.getProperties 
    mProps.setProperty("mstor.mbox.metadataStrategy", "none") 
    val mSession = Session.getDefaultInstance(mProps) 
    val mStore = new MStorStore(mSession, new URLName("mstor:mbox")) 
    mStore.connect 
    val mFolder = mStore.getDefaultFolder 
    val localMbox = (new File("mbox", mboxName)).createNewFile 
    val mbox = mFolder.getFolder(mboxName) 
    mbox.open(Folder.READ_WRITE) 
    mbox.appendMessages(messages) 
    mbox.close(false) 
    mStore.close 
    }