我正在尝试使用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}}
答案 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()。