3

受信トレイを取得し、新しい電子メールの到着をリッスンするための MessageCountListener インターフェイスを実装するサービスを実装しましたが、新しい電子メールの到着時に通知されません! 何が原因で、他に何ができるでしょうか?コードは次のとおりです。

public class EmailRetreiverService extends Service implements MessageCountListener{

public static final Vector v=new Vector();
public static final Vector nwmsg=new Vector();
Message[] m=null;
@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onCreate(){
    Log.d("EmailRetreiverStarted"," ");

    ConvertToSmtp cts=new ConvertToSmtp("myemail@gmail.com","mypassword"," "," "," ", " ");
    Folder folder=cts.retreiveInbox();
    try {
        m=folder.getMessages();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    for(int i=0;i<m.length;i++){
        v.add(m[i]);

    }
    Log.d("EmailRetreiverMessageCount",new Integer(m.length).toString());
    Collections.reverse(v);
    /*folder.addMessageCountListener(new MessageCountAdapter(){  

        public void messagesAdded(MessageCountEvent ev) {  
            Log.d("MessageListener","message listner invoked.");  
            Message[] msgs = ev.getMessages(); 
            TTSservice.say("Attention! "+msgs.length+" new messages have arrived now.Kindly retreive inbox again!");
            Collections.reverse(v);
            for (int i = 0; i < msgs.length; i++) {

                v.add(msgs[i]);

            //System.out.println("Got " + msgs.length + " new messages");  
            }  
            Collections.reverse(v);
            // Just dump out the new messages  

        }

    });*/
    folder.addMessageCountListener(this);
}
@Override
public void onDestroy(){
    v.removeAllElements();
}
@Override
public void messagesAdded(MessageCountEvent arg0) {
    // TODO Auto-generated method stub
    Log.d("EmailService","MessageArrived!");
}
@Override
public void messagesRemoved(MessageCountEvent arg0) {
    // TODO Auto-generated method stub
    Log.d("EmailService","MessageRemoved!");
}

サービスが受信トレイを正常に取得していることに注意する必要がありますが、通知を受け取らないだけです。

4

1 に答える 1

5

JavaMail が新しいメッセージのサーバーからの通知を受け取るようにするには、何かを行う必要があります。簡単な方法は、getMessageCount() メソッドを定期的に呼び出すことです。もう 1 つの方法は、IMAP 固有の idle() メソッドを使用することです。これには、そのメソッドの呼び出し専用のスレッドが必要です。

于 2012-05-08T17:14:35.223 に答える