[英]Download mail attachments from Gmail, getting Exchange[MailMessage: null]
I need to download the attachments from Gmail accounts using java program. 我需要使用java程序从Gmail帐户下载附件。 Using Apache Camel .
使用Apache Camel 。
While running i am getting , 在我跑步的同时,
Exchange[MailMessage: null], thus the attachments.size() is 0
Exchange [MailMessage:null],因此attachments.size()为0
Am posting my test code also 我也发布了我的测试代码
@Test
public void configureExcange() throws Exception {
try {
CamelContext context = new DefaultCamelContext();
Endpoint endpoint =
context.getEndpoint("imaps://imap.gmail.com?username=" + mailId + "&password=" + password
+ "&delete=false&unseen=true&consumer.delay=60000");
// PollingConsumer consumer = endpoint.createPollingConsumer();
Exchange exchange = endpoint.createExchange();
process(exchange);
} catch (Exception e) {
e.printStackTrace();
}
}
public void process(Exchange exchange) throws Exception {
// the API is a bit clunky so we need to loop
Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
if (attachments.size() > 0) {
for (String name : attachments.keySet()) {
DataHandler dh = attachments.get(name);
// get the file name
String filename = dh.getName();
// get the content and convert it to byte[]
byte[] data = exchange.getContext().getTypeConverter().convertTo(byte[].class, dh.getInputStream());
// write the data to a file
FileOutputStream out = new FileOutputStream(filename);
out.write(data);
out.flush();
out.close();
}
}
}
How can i get the attachments ? 我怎样才能获得附件?
Endpoint.createExchange() is just create the exchange to use , it doesn't pull the message from the mail server. Endpoint.createExchange()只是创建要使用的交换,它不会从邮件服务器中提取消息。 You need to use ConsumerTemplate to pull the message from gmail server.
您需要使用ConsumerTemplate从gmail服务器中提取消息。
Updating the function, showing how to poll the mail account. 更新该功能,显示如何轮询邮件帐户。
@Test
public void configureExcange() throws Exception {
PollingConsumer pollingConsumer = null;
try {
CamelContext context = new DefaultCamelContext();
Endpoint endpoint =
context.getEndpoint("imaps://imap.gmail.com?username="
+ mailId + "&password=" + password
+ "&delete=false&peek=false&unseen=true&consumer.delay=60000&closeFolder=false&disconnect=false");
// options unseen=true, will only poll unread mails
//Polling an END point
pollingConsumer = endpoint.createPollingConsumer();
pollingConsumer.start();
pollingConsumer.getEndpoint().createExchange();
Exchange exchange = pollingConsumer.receive(60000);
while (exchange != null) {
process(exchange);
//each time "pollingConsumer" will poll 1 mail at a time
exchange = pollingConsumer.receive(60000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.