gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:59:39 25 4
gpt4 key购买 nike

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

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

有什么建议。

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文件(不知道是否可以信任)。在评论中,他们声明他们只在现有的 mail-ra.jar 中添加了一个“setReleased”。有人对其进行了测试,他们证实它有效。

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

关于java - 消息驱动 bean,不根据轮询间隔获取新电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58913591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com