Java mail .txt имя файла не отображается - PullRequest
0 голосов
/ 08 ноября 2019

Я загружаю вложение в 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);
        }
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...