3

javamail apiを使用して、hotmailアカウントからすべての未読メールを返す単純なJavaプログラムを作成しようとしています。これは私が使用しているコードです:

        String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    Properties props = new Properties();
    props.setProperty("mail.pop3.ssl.enable", "true");
    props.setProperty("mail.pop3s.socketFactory.class", SSL_FACTORY); 
    props.setProperty("mail.pop3s.socketFactory.fallback", "false"); 
    props.setProperty("mail.pop3s.port", "995"); 
    props.setProperty("mail.pop3s.socketFactory.port", "995");
    Session session = Session.getInstance(props,
        new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        Store store = session.getStore("pop3");
        store.connect("pop3.live.com", username, password);
        System.out.println(store);

        Folder inbox = store.getFolder("Inbox");
        inbox.open(Folder.READ_ONLY);
        FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
        Message messages[] = inbox.search(ft);

このコードの私の間違いは何ですか?未読のメールだけでなく、すべてのメールを受け取っているからです。

4

1 に答える 1

2

バンドルされているPOP3プロバイダー(使用していると想定しています)に関するSunのドキュメントからの引用-ドキュメントは/ docs/sundocsにあります

POP3は永続的なフラグをサポートしていません(Folder.getPermanentFlags()を参照)。特に、Flags.Flag.RECENTフラグがPOP3メッセージに設定されることはありません。POP3メールボックス内のどのメッセージが「新規」であるかを判断するのはアプリケーション次第です。アプリケーションと環境のニーズに応じて、これを実現するためのいくつかの戦略があります。簡単なアプローチは、アプリケーションによって表示される最新のメッセージを追跡することです。別の方法は、表示されたすべてのメッセージのUID(以下を参照)を追跡することです。もう1つのアプローチは、すべてのメッセージをローカルメールボックスにダウンロードして、POP3メールボックス内のすべてのメッセージが定義上新しいものになるようにすることです。すべてのアプローチでは、クライアントに関連付けられた永続的なストレージが必要になります。

私はあなたの質問にかなり答えると思います

于 2012-06-28T07:48:53.003 に答える