繁体   English   中英

消息驱动 bean,未根据轮询间隔获取新电子邮件

[英]Message Driven bean, is not fetching the new emails based on polling interval

我尝试使用消息驱动 bean 获取 email。 我的目的是捕获新的电子邮件。 我用过 Jboss 6.1。 我在 gmail 中启用了 pop3。 当我启动服务器时,能够从收件箱中获取现有的电子邮件。

一旦服务器启动并且应用程序正在运行,MailListener 不会通知新的 email。 我也尝试添加轮询间隔。

有什么建议么。

package uk.co.test.inbound;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.inject.Named;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Message.RecipientType;

import org.jboss.ejb3.annotation.ResourceAdapter;
import org.jboss.resource.adapter.mail.inflow.MailListener;


@MessageDriven(
            activationConfig = { 
            @ActivationConfigProperty(propertyName = "mailServer", propertyValue = "pop.gmail.com"),
            @ActivationConfigProperty(propertyName = "mailFolder", propertyValue = "INBOX"),
            @ActivationConfigProperty(propertyName = "storeProtocol", propertyValue = "pop3s"),
            @ActivationConfigProperty(propertyName = "userName", propertyValue = "xxxx@gmail.com"),
            @ActivationConfigProperty(propertyName= "password", propertyValue="xxxxx"),
            @ActivationConfigProperty(propertyName= "pollingInterval", propertyValue="100"),
            @ActivationConfigProperty(propertyName= "port", propertyValue="995"),
            @ActivationConfigProperty(propertyName= "debug", propertyValue="true"),
            @ActivationConfigProperty(propertyName= "starttls", propertyValue="true")
            })
@ResourceAdapter("mail-ra.rar")
@Named("mailListener")
public class EmailReceiver implements MailListener{

    @Override
    public void onMessage(Message msg) {
        System.out.println("One new Message Received" );
        try {

            Address[] fromAddress = msg.getFrom();
            String from = fromAddress[0].toString();
            String subject = msg.getSubject();
            String toList = parseAddresses(msg.getRecipients(RecipientType.TO));
            String ccList = parseAddresses(msg.getRecipients(RecipientType.CC));
            String sentDate = msg.getSentDate().toString();

            String contentType = msg.getContentType();
            String messageContent = "";

            if (contentType.contains("text/plain") || contentType.contains("text/html")) {
                try {
                    Object content = msg.getContent();
                    if (content != null) {
                        messageContent = content.toString();
                    }
                } catch (Exception ex) {
                    messageContent = "[Error downloading content]";
                    ex.printStackTrace();
                }
            } else { 
                try {
                    if (msg.getContent() instanceof Multipart) {
                        Multipart content = (Multipart) msg.getContent();
                        content.getCount();
                        Part part = content.getBodyPart(0);
                        InputStream is = part.getInputStream();
                        if (!(is instanceof BufferedInputStream)) {
                            is = new BufferedInputStream(is);
                        }
                        int c;
                        final StringWriter sw = new StringWriter();
                        while ((c = is.read()) != -1) {
                            sw.write(c);
                        }

                        if (!sw.toString().contains("<div>")) {
                            messageContent = sw.toString();
                        }
                    }
                } catch (IOException e) {
                    messageContent = "[Error downloading content]";
                    e.printStackTrace();
                }
            }


            System.out.println("\t Subject: " + subject);

            System.out.println("\t Message: " + messageContent);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }

    /**
     * Returns a list of addresses in String format separated by comma
     *
     * @param address an array of Address objects
     * @return a string represents a list of addresses
     */
    private String parseAddresses(Address[] address) {
        String listAddress = "";

        if (address != null) {
            for (int i = 0; i < address.length; i++) {
                listAddress += address[i].toString() + ", ";
            }
        }
        if (listAddress.length() > 1) {
            listAddress = listAddress.substring(0, listAddress.length() - 2);
        }

        return listAddress;
    }


}

问题可能与此错误有关: https://issues.redhat.com/browse/JBAS-8635提供了一个“已修复”的 mail-ra.jar 文件(不知道是否可以信任)。 在他们 state 的评论中,他们只在现有的 mail-ra.jar 中添加了“setReleased”。 有人对其进行了测试,他们确认它有效。

在票的最后评论中还有一个手动实现示例。 以这种方式实现它会给你更多的控制权。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM