MimeMessageHelper не может отправить два вложения одного и того же файла с помощью JavaMail? - PullRequest
0 голосов
/ 17 июня 2020

Как видно из названия, я не могу отправить два отдельных вложения одного и того же файла, с другой стороны, нет проблем с отправкой двух или более разных вложений (разных файлов). Я получаю newMessage от Android устройства (при модернизации), содержимое вложений отправляется как byte [].

Вот код:

public boolean sendNewMessage(Message newMessage, int idAccount) {

    boolean messageSent = true;

    Account acc = accountRepository.findById(idAccount).get();

    boolean isAuthenticationRequired = acc.isAuthentication();


    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        //Properties props = mailSender.getJavaMailProperties();
    Properties props = new Properties();
        //SimpleMailMessage message = new SimpleMailMessage();

    mailSender.setHost(acc.getSmtpAddress());
    mailSender.setPort(acc.getSmtpPort()); //465 ...

    mailSender.setUsername(acc.getUsername());
    mailSender.setPassword(acc.getPassword());

    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.debug", "true");
    props.put("mail.smtp.ssl.trust", acc.getSmtpAddress());

    if (isAuthenticationRequired) {
        props.put("mail.smtp.auth", "true");
    } else {

    }

    mailSender.setJavaMailProperties(props);

    MimeMessage mimeMessage = mailSender.createMimeMessage();
    boolean hasAttachments = false;
    if (newMessage.getAttachments().size() > 0) hasAttachments = true;
    MimeMessageHelper helper = null;

    try {

        helper = new MimeMessageHelper(mimeMessage, hasAttachments);

        if (hasAttachments){

            for (Attachment att : newMessage.getAttachments()){

                helper.addAttachment(att.getName(), new ByteArrayDataSource(att.getData(), createMimeType(att)));//I've also tried to attache current date_time to att.getName(), but it didn't work
            }
        }

        helper.setFrom(newMessage.getFrom());
        helper.setTo(newMessage.getTo().stream().toArray(String[]::new));
        helper.setCc(newMessage.getCc().stream().toArray(String[]::new));
        helper.setBcc(newMessage.getBcc().stream().toArray(String[]::new));

        helper.setSubject(newMessage.getSubject());
        helper.setText(newMessage.getContent());

        mailSender.send(mimeMessage);

        newMessage.setDate_time(LocalDateTime.now());
        newMessage.setAccount(acc);
        addNewMessage(newMessage); //adds to database

    } catch (MessagingException e) {
        e.printStackTrace();
        messageSent = false;

    } catch (Exception e) {
        e.printStackTrace();
        messageSent = false;
    }

    return messageSent;

}


private String createMimeType(Attachment att){

    return URLConnection.guessContentTypeFromName(att.getName()+"."+att.getMime_type());
}

1 Ответ

0 голосов
/ 18 июня 2020

Java Отладка почты регистрирует загрузку нескольких файлов и нескольких частей содержимого, но на принимающей стороне есть только один, вероятно, из-за того же имени вложения (не могу найти доказательства, но javado c метода addAttachment предполагает, что некоторая внутренняя работа находится на место). Я бы предложил изменить имя вложения ie добавить управление версиями:

helper.addAttachment("temp.csv", new ByteArrayDataSource(new FileInputStream("temp.csv").readAllBytes(), "text/plain"));
helper.addAttachment("temp1.csv", new ByteArrayDataSource(new FileInputStream("temp.csv").readAllBytes(), "text/plain"));
...