在课堂上收到邮件

时间:2017-03-14 21:24:29

标签: java email javamail

我正在尝试使用Session session = Session.getDefaultInstance(props, null); Store store = session.getStore(provider); try { store.connect(host, username, password); Folder inbox = store.getFolder("INBOX"); if (inbox == null) { System.out.println("No INBOX"); System.exit(1); } inbox.open(Folder.READ_ONLY); Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { System.out.println("Message " + (i + 1)); messages[i].writeTo(System.out); } inbox.close(false); store.close(); } catch (IOException e){ e.printStackTrace(); 收到消息。

在这里,一切正常:

Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore(provider);
Mail mail=new Mail();
Folder inbox = store.getFolder("INBOX");
store.connect(host, username, password);
inbox = store.getFolder("INBOX");
mail.GetMessage(host,username,password,inbox,store);

但是如果你在一个单独的类中接收邮件,那么就会出现错误&#34;线程中的异常&#34; main&#34; javax.mail.MessagingException:未连接&#34;

呼叫者:

public void GetMessage(String host,String username,String password,Folder inbox,Store store) throws MessagingException, IOException {
    try {
        inbox = store.getFolder("INBOX");
        if (inbox == null) {
            System.out.println("No INBOX");
            System.exit(1);
        }
        inbox.open(Folder.READ_ONLY);
        Message[] messages = inbox.getMessages();
        for (int i = 0; i < messages.length; i++) {
            System.out.println("Message " + (i + 1));
            messages[i].writeTo(System.out);
        }
        inbox.close(false);
        store.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

班级邮件:

{{1}}

2 个答案:

答案 0 :(得分:1)

Change Session.getDefaultInstance to Session.getInstance.

您的代码对于“收件箱”的操作感到困惑。您的GetMessage方法将覆盖参数而不使用它。

问题是因为您的调用代码在连接到商店之前尝试获取INBOX文件夹。如果您在调用代码中删除“收件箱”的使用,它将起作用,并且更有意义!

答案 1 :(得分:1)

在来电者中,移动

store.connect(host, username, password);

之前

Folder inbox = store.getFolder("INBOX");

并在邮件类中删除

inbox = store.getFolder("INBOX");

因为你是打电话的人所以没用。

PS。要遵循Java命名标准,请将 GetMessage()方法重命名为 getMessage()