Javamail没有连接

时间:2017-09-15 21:36:30

标签: java javamail

第一次尝试使用JavaMail。在详细说明它打印为真(如果它已连接),但在尝试查找文件夹时,它不起作用。

private static void login() throws MessagingException {
    String host = "imap.gmail.com";
    String username = "user@gmail.com";
    String password = "password";
    Properties props = new Properties();
    props.setProperty("mail.imap.ssl.enable", "true");
    props.setProperty("mail.store.protocol", "imaps");
    session = Session.getInstance(props);
    store = session.getStore("imaps");
    store.connect(host, 993, username, password);
    System.out.println(store.isConnected()); //THIS HERE RETURNS TRUE
}

public static void check()
{
    try {
        //create the folder object and open it
        Folder emailFolder = store.getFolder("INBOX"); //ENDS PROGRAM LOGGING, "Not Connected"
        emailFolder.open(Folder.READ_ONLY);

        javax.mail.Message[] messages = emailFolder.getMessages();

        for (int i = 0, n = messages.length; i < n; i++) {
            javax.mail.Message message = messages[i];
            if(message.getSubject().contains("Optimism") && message.getSubject().contains("New reply to watched thread")) {
                for(Guild g : jda.getGuilds()) {
                    if(g.getName().equalsIgnoreCase("Optimism"))
                    for (TextChannel c : g.getTextChannels())
                        if (c.getName() == "staff_chat") {
                            c.sendMessage("**New Thread Reply! - " + new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date()) + " EST.").queue();
                        }
                }

            }

        }

        //close the store and folder objects
        emailFolder.close(false);
        store.close();

    } catch (NoSuchProviderException e) {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

来自第一个循环的if语句中的所有内容都可以正常工作

注意:它有两种方法,因为每2分钟调用一次检查方法。

1 个答案:

答案 0 :(得分:2)

正如你所说,check()方法每两分钟调用一次。当您关闭其中的商店对象store.close()时,它会产生问题。所以它会在第一次工作,之后就不会。

您可以在login()之前每隔两分钟拨打check(),或者不要在支票中关闭商店并将其打开/关联。

希望这有帮助。