Javamail API - MessageCountListener 未被调用

标签 java spring email jakarta-mail

我正在尝试使用 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);

我不知道我哪里做错了。我的 Activity 没有调用。请帮忙

最佳答案

服务器仅在执行命令时通知客户端新消息。您要么需要定期执行命令,例如通过调用 getMessageCount,要么需要使用 IMAP IDLE support等待通知。另请参阅IdleManager这是 JavaMail 1.5.2 中的新内容.

关于Javamail API - MessageCountListener 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23651221/

相关文章:

java - 在不处理慢速 IO 时,从性能的角度来看使用响应式编程是否有意义?

java - Apache Axis2 的 Eclipse 插件来创建 web 服务

java - Spring事务性包私有(private)方法

php - 忘记密码成功连接到邮箱

java - Netbeans GUI 编辑器不支持 ASCII - Java

java - 两个 int 相乘得到负数

java - 使用复合Where子句的JPA查询效率低下

java - Spring Boot AOP 不适用于 AfterThrow

validation - 阻止或允许带有 ‘+’ 的电子邮件地址是标准做法吗?

PHP 从 html 消息发送电子邮件