Java 在课堂上接收邮件

Java 在课堂上接收邮件,java,email,jakarta-mail,Java,Email,Jakarta Mail,我正在尝试使用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 (inbo

我正在尝试使用
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();
班级邮件:

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();
    }
}
public void GetMessage(字符串主机、字符串用户名、字符串密码、文件夹收件箱、存储区)抛出MessaginException、IOException{
试一试{
收件箱=store.getFolder(“收件箱”);
如果(收件箱==null){
System.out.println(“无收件箱”);
系统出口(1);
}
收件箱。打开(文件夹。只读);
Message[]messages=inbox.getMessages();
for(int i=0;i

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

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

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

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

在呼叫者中,移动

store.connect(host, username, password);
以前

Folder inbox = store.getFolder("INBOX");
并在邮件类中删除

inbox = store.getFolder("INBOX");
这没用,因为你是在打电话

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

在调用者中,移动

store.connect(host, username, password);
以前

Folder inbox = store.getFolder("INBOX");
并在邮件类中删除

inbox = store.getFolder("INBOX");
这没用,因为你是在打电话


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

您已经破坏了封装
Mail.GetMessage()
应该使用主机/用户名/密码并连接到邮件服务器本身,或者应该使用
存储
(和文件夹名称)和
getFolder()
,或者应该使用已经找到的
文件夹收件箱
并对其进行操作。但是如果
GetMessage()
没有打开,或者在第二次尝试检索邮件时,您可能会发现存储已关闭或损坏,那么您不应该关闭
内的
存储
。用适当的封装重新构造代码。您还应该查看堆栈跟踪,确定引发异常的行,并将其包含在问题描述中。我投票将此问题作为离题题结束,因为问题是一个简单的操作顺序错误,不太可能帮助未来的读者。你已经破坏了你的封装
Mail.GetMessage()
应该使用主机/用户名/密码并连接到邮件服务器本身,或者应该使用
存储
(和文件夹名称)和
getFolder()
,或者应该使用已经找到的
文件夹收件箱
并对其进行操作。但是如果
GetMessage()
没有打开,或者在第二次尝试检索邮件时,您可能会发现存储已关闭或损坏,那么您不应该关闭
内的
存储
。用适当的封装重新构造代码。您还应该查看堆栈跟踪,确定引发异常的行,并将其包含在问题描述中。我投票将此问题作为离题题结束,因为该问题是一个简单的操作顺序错误,不太可能帮助未来的读者。