簡體   English   中英

Javamail API-未調用MessageCountListener

[英]Javamail API - MessageCountListener is not getting Called

我正在嘗試使用Javamail API從我的gmail收件箱中讀取未讀郵件。 這是我的代碼...

final Properties props = new Properties();
    props.setProperty("mail.store.protocol", "imaps");
    String attachFiles = "";
    try
    {
        final Session session = Session.getInstance(props, null);
        final Store store = session.getStore();
        store.connect("imap.gmail.com", "*********", "*********");
        final Folder inbox = store.getFolder("INBOX");
        final MailCountEventListener listener = new MailCountEventListener();
        inbox.addMessageCountListener(listener);


        inbox.open(Folder.READ_ONLY);
        final Message msg = inbox.getMessage(inbox.getMessageCount());
        final Address[] in = msg.getFrom();
        for (final Address address : in)
        {
            System.out.println("FROM:" + address.toString());
        }
        final Multipart mp = (Multipart) msg.getContent();
        final BodyPart bp = mp.getBodyPart(0);
        if (msg.getContentType().contains("multipart"))
        {
            final int numberOfParts = mp.getCount();
            for (int partCount = 0; partCount < numberOfParts; partCount++)
            {
                final MimeBodyPart part = (MimeBodyPart) mp.getBodyPart(partCount);
                if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
                {
                    // this part is attachment
                    final String fileName = part.getFileName();
                    attachFiles += fileName + ", ";
                    part.saveFile("E:/" + File.separator + fileName);
                }
                else
                {
                    System.out.println("MultiPart Message Content :" + part.getContent().toString());
                }
            }

            if (attachFiles.length() > 1)
            {
                attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
            }

            System.out.println("Attachments: " + attachFiles);
        }
        System.out.println("SENT DATE:" + msg.getSentDate());
        System.out.println("SUBJECT:" + msg.getSubject());
        System.out.println("CONTENT:" + bp.getContent());
    }
    catch (final Exception mex)
    {
        mex.printStackTrace();
    }

我的代碼工作正常。 它正在讀取帶有附加模板的郵件正文。 現在,我想調用MessageCountListener以便如果有任何新郵件進入我的收件箱,則應自動調用Listener並讀取新郵件正文。

但是這里的問題是我的聽眾沒有打電話。

public class MailCountEventListener implements MessageCountListener
{


/*
 * (non-Javadoc)
 * 
 * @see javax.mail.event.MessageCountListener#messagesAdded(javax.mail.event.MessageCountEvent)
 */
@Override
public void messagesAdded(final MessageCountEvent messagecountevent)
{

    String attachFiles = "";

    System.out.println("message listner invoked.");
    final Message[] msgs = messagecountevent.getMessages();

    System.out.println("Got " + msgs.length + " new messages");
    try
    {
        final Message msg = msgs[0];
        final Address[] in = msg.getFrom();
        for (final Address address : in)
        {
            System.out.println("FROM:" + address.toString());
        }
        final Multipart mp = (Multipart) msg.getContent();
        final BodyPart bp = mp.getBodyPart(0);
        if (msg.getContentType().contains("multipart"))
        {
            final int numberOfParts = mp.getCount();
            for (int partCount = 0; partCount < numberOfParts; partCount++)
            {
                final MimeBodyPart part = (MimeBodyPart) mp.getBodyPart(partCount);
                if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
                {
                    // this part is attachment
                    final String fileName = part.getFileName();
                    attachFiles += fileName + ", ";
                    part.saveFile("E:/" + File.separator + fileName);
                }
                else
                {
                    System.out.println("MultiPart Message Content :" + part.getContent().toString());
                }
            }

            if (attachFiles.length() > 1)
            {
                attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
            }

            System.out.println("Attachments: " + attachFiles);
        }
        System.out.println("SENT DATE:" + msg.getSentDate());
        System.out.println("SUBJECT:" + msg.getSubject());
        System.out.println("CONTENT:" + bp.getContent());

    }
    catch (final Exception mex)
    {
        mex.printStackTrace();
    }
}

/*
 * (non-Javadoc)
 * 
 * @see javax.mail.event.MessageCountListener#messagesRemoved(javax.mail.event.MessageCountEvent)
 */
@Override
public void messagesRemoved(final MessageCountEvent messagecountevent)
{
    // YTODO Auto-generated method stub

}

  }

添加監聽器..

final MailCountEventListener listener = new MailCountEventListener();
inbox.addMessageCountListener(listener);

我無法弄清楚我在哪里做錯了。 我的活動沒有打。 請幫忙

服務器僅在執行命令時將新消息通知客戶端。 您要么需要定期執行命令(例如,通過調用getMessageCount),要么需要使用IMAP IDLE支持來等待通知。 另請參閱JavaMail 1.5.2中新增的IdleManager

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM