将消息附加到MaildirFolder时出现FileNotFoundException

时间:2014-01-02 12:27:30

标签: java javamail

我正在尝试使用JavaMaildir(http://sourceforge.net/projects/javamaildir/)在本地存储一些在线检索的电子邮件。不幸的是,我无法理解FileNotFoundException的含义。以下是重现问题的示例代码:

import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.URLName;
import javax.mail.internet.MimeMessage;

import net.ukrpost.storage.maildir.MaildirFolder;
import net.ukrpost.storage.maildir.MaildirStore;


public class MaildirStoreTest {

    public static void main(String[] args) throws MessagingException {
        String mdirpath = "/tmp/TestMaildir";

        Properties p = new Properties();
        p.put("mail.store.maildir.autocreate", "true");

        Session s = Session.getDefaultInstance(p);
        s.setDebug(true);

        MaildirStore st = (MaildirStore)s.getStore(new URLName("maildir:"+mdirpath));

        MaildirFolder fd = (MaildirFolder) st.getDefaultFolder();

        fd.open(Folder.READ_WRITE);

        MimeMessage m = new MimeMessage(s);
        m.setText("Hello World!");

        fd.appendMessages(new Message[]{m});

        st.close();
    }

}

最后一个代码行抛出FileNotFoundException。这是错误日志:

DEBUG: setDebug: JavaMail version 1.5.1
DEBUG: getProvider() returning javax.mail.Provider[STORE,maildir,net.ukrpost.storage.maildir.MaildirStore,Priocom Corp.]
unrecoverable io error: java.io.FileNotFoundException: /tmp/TestMaildir/./tmp/1388665301.33536.francesco-laptop (No such file or directory)
javax.mail.MessagingException: unrecoverable io error;
  nested exception is:
    java.io.FileNotFoundException: /tmp/TestMaildir/./tmp/1388665301.33536.francesco-laptop (No such file or directory)
    at net.ukrpost.storage.maildir.MaildirFolder.appendMessages(MaildirFolder.java:469)
    at MaildirStoreTest.main(MaildirStoreTest.java:34)
Caused by: java.io.FileNotFoundException: /tmp/TestMaildir/./tmp/1388665301.33536.francesco-laptop (No such file or directory)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
    at net.ukrpost.storage.maildir.MaildirFolder.getTmpFileOutputStream(MaildirFolder.java:401)
    at net.ukrpost.storage.maildir.MaildirFolder.appendMessages(MaildirFolder.java:458)
    ... 1 more
Exception in thread "main" javax.mail.MessagingException: cant append message;
  nested exception is:
    javax.mail.MessagingException: unrecoverable io error;
  nested exception is:
    java.io.FileNotFoundException: /tmp/TestMaildir/./tmp/1388665301.33536.francesco-laptop (No such file or directory)
    at net.ukrpost.storage.maildir.MaildirFolder.appendMessages(MaildirFolder.java:527)
    at MaildirStoreTest.main(MaildirStoreTest.java:34)
Caused by: javax.mail.MessagingException: unrecoverable io error;
  nested exception is:
    java.io.FileNotFoundException: /tmp/TestMaildir/./tmp/1388665301.33536.francesco-laptop (No such file or directory)
    at net.ukrpost.storage.maildir.MaildirFolder.appendMessages(MaildirFolder.java:469)
    ... 1 more
Caused by: java.io.FileNotFoundException: /tmp/TestMaildir/./tmp/1388665301.33536.francesco-laptop (No such file or directory)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
    at net.ukrpost.storage.maildir.MaildirFolder.getTmpFileOutputStream(MaildirFolder.java:401)
    at net.ukrpost.storage.maildir.MaildirFolder.appendMessages(MaildirFolder.java:458)
    ... 1 more

提供程序似乎正确加载,但我真的不明白它为什么要查找该文件...不应该创建该文件而不是??

/tmp/TestMaildir文件夹存在且可由我的用户写入。我在Linux机器上。

1 个答案:

答案 0 :(得分:1)

我对JavaMaildir一无所知,这可能与你得到的错误无关,但通常Store.getDefaultFolder不会返回一个可以存储消息的文件夹。它会返回一个你的文件夹可以认为是文件夹命名层次结构中的“根”文件夹。您需要在该文件夹下创建一个用于存储邮件的文件夹。

“默认”文件夹,例如,您的“收件箱”,默认情况下会传递邮件。