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