Я загружаю вложение в Java из электронной почты и обнаружил, что когда файл вложения представляет собой какой-то TXT-файл, код каким-то образом перепрыгивает через функцию для получения имени вложения. (функции с именем analysisAttachment и getAttachmentName) Я подумал, что это может быть потому, что тело сообщения загружается в виде файла .txt (может быть, я не знаю), и тогда может быть трудно распознать, что является частью тела и что является вложением ?? ?
Буду признателен за любой совет или идею. Заранее спасибо.
Вот код (это не весь код, но есть важные функции для моего вопроса):
public class ImapMailAnalyzer implements IRawPathAnalyzer {
private int count;
private final CredentialsProvider credentialsProvider;
private final JavaMailProbe probe = new JavaMailProbe();
private final boolean analyzeContent;
public ImapMailAnalyzer(CredentialsProvider cp, boolean analyzeContent){
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "Create IMAP analyzer");
this.credentialsProvider = cp;
this.analyzeContent = analyzeContent;
}
@Override
public void writeFileAnalysis(String rawPath, DataPipe data) throws IOException {
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "analyze folder");
try {
final List<Message> messages;
try{
messages = searchPath(rawPath);
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "Got {0} messages", messages.size());
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "Running analyse");
Folder openFolder = null;
for(Message m: messages){
try{
openFolder = goToFolder(openFolder, m);
count = 0;
analyzeMessage(m, analyzeContent, data);
}catch(Exception t){
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.SEVERE, null, t);
}
if(data.isClosed()){
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.SEVERE, "Qlik data pipe is closed, bail out.");
return;
}
}
}catch(javax.mail.FolderNotFoundException ex){
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.WARNING, "Folder not found", ex);
data.writeRow(null, "Error", ex.getMessage(), null);
}
} catch (URISyntaxException | MessagingException ex) {
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.SEVERE, null, ex);
data.writeRow(IdGenerator.getUniqueID(), "Error", ex.toString(), null);
}
}
private long analyzeMessage(Message message, boolean withContent, DataPipe data) throws IOException, MessagingException, TikaException, Exception{
Long id = IdGenerator.getUniqueID();
try {
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "Read message {0}", id);
writeMessageHeaders(id, message, data);
if(withContent)
probe.read(message, getOnParseHandler(id, data), getOnParseAttachmentHandler(id, data, message));
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "Message {0} done", id);
}catch(MessagingException | TikaException e){
data.writeRow(id, "Error", e.toString());
throw e;
}
return id;
}
private long analyzeAttachment(Metadata metadata, ContentHandler content, DataPipe data, long messageId, Message message) throws IOException, MessagingException, Exception{
long attid = IdGenerator.getUniqueID();
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.FINE, "Analzyed attachemnt {0} of message {1}", new Object[]{attid, messageId});
MimeMultipart MimeMultipart = (MimeMultipart) message.getContent();
processMimeMultipart(MimeMultipart, data, messageId);
String attName = getAttachmentName(metadata);
data.writeRow(attid, "Attachment", attName, messageId);
//writeContent(attid - 1, content, data);
return attid;
}
private String getAttachmentName(Metadata metadata){
if(metadata.get("resourceName") != null){
try {
return MimeUtility.decodeText(metadata.get("resourceName"));
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
return metadata.get("resourceName");
}
}
return "";
}
private BiConsumer<Metadata, ContentHandler> getOnParseAttachmentHandler(long id, DataPipe data, Message message){
return (Metadata metadata, ContentHandler content)-> {
try {
analyzeAttachment(metadata, content, data, id, message);
} catch (Exception ex) {
Logger.getLogger(ImapMailAnalyzer.class.getName()).log(Level.SEVERE, null, ex);
}
};
}