그래서 Apache Camel을 처음 사용합니다. 나는이 코드의 대부분이 아마도 가장 효율적인 방법은 아님을 알고 있지만 아파치 Camel을 사용하여 내 Gmail에 액세스하고 새 메시지를 잡고 첨부 파일에 첨부 파일을 지정된 디렉토리에 저장하는 코드를 만들었습니다. 내 경로는 본문 데이터를 해당 디렉토리의 파일로 저장합니다. DataHandler가 getContent() 메서드를 사용하려고 할 때마다 파일을 저장하거나 System.out에 본문을 인쇄하려고 할 때마다 FolderClosedIOException 또는 FolderClosed Exception이 발생합니다. 나는 그것을 고치는 법을 모른다. catch는 폴더를 다시 열지 만 다른 메시지를받은 후에 다시 닫힙니다. 무슨 잘못FolderClosedIOException을 해결하는 방법은 무엇입니까?
import org.apache.camel.*;
import java.io.*;
import java.util.*;
import javax.activation.DataHandler;
import javax.mail.Folder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import com.sun.mail.util.FolderClosedIOException;
public class Imap {
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("imaps://imap.gmail.com?username=********@gmail.com&password=******"
+ "&debugMode=false&closeFolder=false&mapMailMessage=false"
+ "&connectionTimeout=0").to("file:\\EMAIL");
}
});
Map<String,String> props = new HashMap<String,String>();
props.put("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory");
props.put("mail.imap.auth", "true");
props.put("mail.imap.host","imap.gmail.com");
props.put("mail.store.protocol", "imaps");
context.setProperties(props);
Folder inbox = null;
ConsumerTemplate template = context.createConsumerTemplate();
context.start();
while(true) {
try {
Exchange e = template.receive("imaps://imap.gmail.com?username=*********@gmail.com&password=***********", 60000);
if(e == null) break;
Message m = e.getIn();
Map<String, Object> s = m.getHeaders();
Iterator it = s.entrySet().iterator();
while(it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey()+" === "+pairs.getValue()+"\n\n");
it.remove();
}
if(m.hasAttachments()) {
Map<String,DataHandler> att = m.getAttachments();
for(String s1 : att.keySet()) {
DataHandler dh = att.get(s1);
String filename = dh.getName();
ByteArrayOutputStream o = new ByteArrayOutputStream();
dh.writeTo(o);
byte[] by = o.toByteArray();
FileOutputStream out = new FileOutputStream("C:/EMAIL/"+filename);
out.write(by);
out.flush();
out.close();
}
}
} catch(FolderClosedIOException ex) {
inbox = ex.getFolder();
inbox.open(Folder.READ_ONLY);
}
}
context.stop();
}
}
은 누군가 가르쳐주세요!
이 오류는 여기서 발생합니다
dh.writeTo(o);
안녕하세요,이 솔루션을 찾으셨습니까? 정확하게 똑같은 문제를 다루고 있으며 똑같은 오류가 발생했습니다. –