0

バックグラウンド:

特定の種類のメールについて Gmail の受信トレイを監視し、対処しようとしています。javamail のaddMessageCountListener.messagesAdded()を使用して受信トレイを監視するようにアカウントを正常にセットアップして、新しいメールをリッスンし、新しいメッセージが到着するまでスレッドをアイドル状態にしています。

問題:

誤って [ Sign out all other sessions ] ボタンをクリックした後でも、javamail をログインしたままにしたい。

他のすべてのセッションをサインアウトする

私の携帯電話の gmail セッション (gmail のネイティブ アプリを使用) はこれに対して回復力があるため、これが可能であることはわかっています。

4

1 に答える 1

0

コメント/ヒントをありがとうございました。ここでは、Java で簡単に説明します。他の人がそれを必要とするかもしれない場合に備えて。

もちろん、以下のコードに関するコメント/フィードバック/レビュー/潜在的な問題は大歓迎です:)

package com.anand.test;

import java.util.Properties;

import javax.mail.FolderClosedException;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.event.ConnectionEvent;
import javax.mail.event.ConnectionListener;
import javax.mail.event.MessageCountEvent;
import javax.mail.event.MessageCountListener;

import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPSSLStore;

class GMailStayConnect {
    public static void main(String a[]) {
        MailConnector m = new MailConnector("uname", "pwd");
        Thread newThrd = new Thread(m);
        newThrd.start();
    }
}

class StoreGetter {
    public static IMAPSSLStore getGStore(String uname, String passw){
        Properties props = new Properties();
        props.put("mail.imaps.sasl.enable", "true");
        props.put("mail.imaps.sasl.mechanisms", "XOAUTH");
        props.put("mail.debug", "true");

        Session session = Session.getInstance(props);
        session.setDebug(true);

        IMAPSSLStore store = new IMAPSSLStore(session, null);
        try {
            store.connect(uname, passw);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return store;
    }
}

class MailConnector implements Runnable {
    private String uname = "";
    private String passw = "";

    public MailConnector(String uname, String passw) {
        this.uname = uname;
        this.passw = passw;
    }

    public void run() {
        IMAPSSLStore store = StoreGetter.getGStore(uname, passw);
        try {
            IMAPFolder inbox = (IMAPFolder) store.getFolder("Inbox");
            inbox.addMessageCountListener(new MessageCountListener() {
                public void messagesAdded(MessageCountEvent e) {
                    // My custom action goes here on e.getMessages()
                }

                public void messagesRemoved(MessageCountEvent e) {
                    // My custom action goes here on e.getMessages()
                }
            });
            inbox.addConnectionListener(new ConnectionListener() {
                public void opened(ConnectionEvent e) {
                    // System.out.println("Opened !!");
                }

                public void disconnected(ConnectionEvent e) {
                    // System.out.println("Disconnected !!");
                }

                public void closed(ConnectionEvent e) {
                    // System.out.println("Closed !!");
                    // Another place to handle reconnecting
                }
            });
            while (true) {
                inbox.idle();
            }
        } catch (FolderClosedException e1) {
            // Place to handle reconnecting
            GMailStayConnect.main(null);
        } catch (MessagingException e1) {
            e1.printStackTrace();
        }
    }
}
于 2013-02-06T09:13:07.163 に答える