Длина прикрепленного документа (в байтах) изменяется при присоединении. Java Mail - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь автоматизировать прием почты с помощью Javax Mail API (1.6.1). Процесс идет следующим образом:

  1. Прилагаемые документы любой входящей почты загружаются и вычисляется их хэш Хеш рассчитывается только с длиной в байтах и ​​именем файла (в целях оптимизации).

  2. Почта затем пересылается внешнему объекту, а хэш обновляется в базе данных.

  3. Внешнее лицо отвечает (через какое-то правило в своем почтовом ящике) на сообщение, не загружая прикрепленный документ.

  4. Я получаю «ACK», и для проверки целостности прикрепленных документов я снова скачиваю документы и вычисляю их хэш.

Проблема возникает, когда (иногда) хэш не равен. Если проверить более подробно, длина файла изменилась при пересылке, но я изменил только имя, после чего вычисляется хеш.

Можно подумать, что я трактую сообщения ACK и NORMAL (для пересылки) по-разному. Это не так, я обрабатываю оба сообщения как обычные сообщения до конца.

Это код, который я использую для прикрепления файлов.

void sendMail(args[]){
    props = new Properties();
    props.put("mail.smtp.host", host); // for gmail use smtp.gmail.com
    props.put("mail.smtp.auth", true);
    props.put("mail.smtp.port", port); //465
    props.put("mail.smtp.socketFactory.port", port); //465
    props.put("mail.smtp.starttls.enable", true);
    props.put("mail.smtp.timeout", 30000);

    mailSession = Session.getInstance(props, new    javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(from, password);
                }
            });

    MimeMessage msg = new MimeMessage(mailSession);
    msg.setFrom(new InternetAddress(from));

    ccemail = cc;
    ccUser = InternetAddress.parse(ccemail);

    msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
    msg.setRecipients(Message.RecipientType.CC, ccUser);
    msg.setSubject(subject);

    //--[ Create the body of the mail
    mbp1 = new MimeBodyPart();
    mbp1.setText(body);

    // create the second message part
    mp = new MimeMultipart();
    mp.addBodyPart(mbp1);

    if ( files != null ){
        for (String file : files) {    
            file = file.split(";", -1)[0];
                if (subject.startsWith("Summary Doctodata")) 
                    is = Utils.TmpFolder.getFileIs(file, "NO_TMP");
                else if (subject.startsWith("Emergency")) 
                    is = Utils.TmpFolder.getFileIs(file, "TMP");

                mbp2 = new MimeBodyPart();

                if (is == null)
                    is = Utils.TmpFolder.getFileIs(file);

                if (is == null)
                    return false;

                if (is != null)
                    is.close();

                // attach the file to the message
                if (subject.startsWith("Summary Doctodata")) 
                    fds = new FileDataSource(file);
                else 
                    fds = new FileDataSource(Utils.Parameters.tempFolderPath + "temp/" + file);

                mbp2.setDataHandler(new DataHandler(fds));
                mbp2.setFileName(fds.getName());
                mp.addBodyPart(mbp2);
                }
            }

            // add the Multipart to the message
            msg.setContent(mp);

            // set the Date: header
            msg.setSentDate(new Date());

            Transport.send(msg);

            is = null;
            bytes = null;
            Utils.gc();
            return true;
        }
    }
}

Как возможно, что вложенные файлы изменяются по длине, если внешняя сущность даже не загружает вложенные документы? Почтовый сервер добавляет или изменяет какой-либо заголовок?

Есть ли какой-либо другой способ убедиться, что прилагаемые документы, отправленные этой внешней организации, и документы, которые мы получаем от этой организации, совпадают? Я также пробовал с File.hashCode(), но он также меняется (имеет смысл, так как длина изменяется с самого начала).

Большое спасибо!

...