Электронная почта MimeMessage не будет отправляться с вложениями - PullRequest
0 голосов
/ 28 ноября 2018

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

Я работаю с классом Mail.java, классом emailService.java и контроллером формы, чтобы получить эту функцию.

Я получаю неопределенную ошибку "исключение нулевого указателя java".Любая идея, почему мое сообщение не отправит?Я думаю, что это связано с дополнением fileSystemResource к коду.Но в моей консоли отображаются файлы ...

Код службы электронной почты:

@Service
public class EmailService {

    private JavaMailSender javaMailSender;

    @Autowired
    public EmailService(JavaMailSender javaMailSender){
        this.javaMailSender = javaMailSender;
    }

    @Autowired
    public StorageService storage;
    @Autowired
    private SpringTemplateEngine templateEngine;

    public void sendSimpleMessage(Mail mail, DirectBind directBind) throws MessagingException, IOException {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,
                MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
                StandardCharsets.UTF_8.name());

        helper.addAttachment("Mail_Icon.png", new ClassPathResource("static/images/Mail_Icon.png"));

        Context context = new Context();
        context.setVariables(mail.getModel());
        context.setVariable("directBind",directBind);
        String html = templateEngine.process("emailMessage", context);

        helper.setTo(mail.getTo());
        helper.setText(html, true);
        helper.setSubject(mail.getSubject());
        helper.setFrom(mail.getFrom());

//        List<Object> files = new ArrayList<>();
//        files.add(storage.getUploadDir());

        FileSystemResource allFiles= new FileSystemResource(new File(storage.getUploadDir()));
        helper.addAttachment(allFiles.getFilename(),allFiles);

        javaMailSender.send(message);
    }
}

Функция отправки в контроллере:

@RequestMapping(value="/directBind",  params="send")
    public String send(Model model, @ModelAttribute(value="directBind") DirectBind directBind){
        List<String> businessAgencyList = directBind.getBusinessAgencyList();
        Mail mail = new Mail();
        mail.setFrom("no-reply@hgitservices.com");
        mail.setTo(new String[]{"stacief@hgitservices.com"});
        mail.setSubject("Oli Affiliate - AMS360 & PMA Data Checklist");

        Map<String, Object> mailModel = new HashMap<String, Object>();
        mail.setModel(mailModel);

       // List<Object> files = new ArrayList<>();
       // files.add(storageService.getUploadDir());
       // mail.setAttachments(files);

        try {
            emailService.sendSimpleMessage(mail, directBind);
        } catch (Exception e) {
            e.printStackTrace();
            return ("redirect:/?sentMessageFail");
        }
        return ("redirect:/?sentMessage");
    }

    @RequestMapping(value="/email")
    public String email(){
        return "emailMessage";
    }
}

Модель моей почты:

public class Mail {

    private String from;
    private String[] to;
    private String subject;
    private List<Object> attachments;
    private Map<String, Object> model;

    public Mail() {

    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String[] getTo() {
        return to;
    }

    public void setTo(String[] to) {
        this.to = to;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public List<Object> getAttachments() {
        return attachments;
    }

    public void setAttachments(List<Object> attachments) {
        this.attachments = attachments;
    }


    public Map<String, Object> getModel() {
        return model;
    }

    public void setModel(Map<String, Object> model) {
        this.model = model;
    }

}

Сообщение об ошибке ...

org.springframework.mail.MailSendException: Failed messages: java.lang.NullPointerException; message exception details (1) are:
Failed message 1:
java.lang.NullPointerException
	at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:226)
	at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:299)
	at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1375)...

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вам необходимо использовать:

  @Override
    public void sendAttachmentMessage(List<String> to, String subject, String text, String pathToAttachment) {

    MimeMessage message = emailSender.createMimeMessage();

    MimeMessageHelper helper = null;
    try {
        helper = new MimeMessageHelper(message, true);

        helper.setTo(to.toArray(new String[to.size()]));
        helper.setSubject(subject);

        String content = builder.build(text);
        helper.setText(content, true);

        FileSystemResource file = new FileSystemResource(new File(pathToAttachment));

        helper.addAttachment(file.getFilename(), file);
    } catch (MessagingException e) {
        LOG.error("Error sending email with attachment.", e);
    }

    emailSender.send(message);
    }
0 голосов
/ 28 ноября 2018

Я бы добавил его в качестве комментария, если смогу (количество повторений ниже 50).

Вы можете попробовать заменить

helper.addAttachment(allFiles.getFilename(),allFiles);

на

helper.addAttachment(allFiles.getFilename(),allFiles.getFile());

Редактировать:

FileSystemResource allFiles= new FileSystemResource(new File(storage.getUploadDir() + "/filename.txt"));

Итерация по файлам (может потребоваться корректировка):

File myDir = new File(storage.getUploadDir());
File[] myFiles = myDir.listFiles();

if (myFiles != null) {
    for (File cFile : myFiles) {
        helper.addAttachment(cFile.getName(), cFile);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...