38.14. 使用附加示例消耗邮件
在这个示例中,我们轮询一个载体,并将邮件中的所有附件存储为文件。首先,我们定义了一个路由来轮询语音。由于本示例基于 google 邮件,它使用与 SSL 示例中所示相同的路由:
from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD" + "&delete=false&unseen=true&delay=60000").process(new MyMailProcessor());
我们不使用一个处理器来记录邮件,以便我们可以处理来自 java 代码的邮件:
public void process(Exchange exchange) throws Exception { // the API is a bit clunky so we need to loop AttachmentMessage attachmentMessage = exchange.getMessage(AttachmentMessage.class); Map<String, DataHandler> attachments = attachmentMessage.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(); } } }
您可以看到处理附件的 API 是一个位冲突,但在有些情况下,您可以获取 javax.activation.DataHandler
,以便您可以使用标准 API 处理附件。