在 class 中收到邮件

Receiving a mail in the class

我正在尝试使用 import javax.mail.* 获取消息。

在这里,一切正常:

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();

但是如果你把接收邮件放在一个单独的class,那么就会出现错误"Exception in thread" main "javax.mail.MessagingException: Not connected"

来电者:

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);

Class 邮件:

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();
    }
}

Change Session.getDefaultInstance to Session.getInstance.

您的代码对 "inbox" 的作用感到困惑。您的 GetMessage 方法正在覆盖参数而不使用它。

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

在调用者中,移动

store.connect(host, username, password);

之前

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

并在邮件中删除 Class

inbox = store.getFolder("INBOX");

没用,因为你是来电者。

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