Java MimeMessage电子邮件不会随附件一起发送

Java MimeMessage电子邮件不会随附件一起发送,java,spring-boot,mime-message,Java,Spring Boot,Mime Message,因此,我有一个电子邮件模板,发送一个完全没有附件的表单。一直在尝试将附件(从临时存储在文件夹中的服务器抓取附件)添加到要发送电子邮件的表单中 我正在使用Mail.java类、emailService.java类和表单的控制器来实现这一功能 我得到一个模糊的错误“java空指针异常”。你知道为什么我的信息不能发送吗?我认为这与代码中添加的fileSystemResource有关。但在我的控制台中,它显示文件 电子邮件服务代码: @Service public class EmailService

因此,我有一个电子邮件模板,发送一个完全没有附件的表单。一直在尝试将附件(从临时存储在文件夹中的服务器抓取附件)添加到要发送电子邮件的表单中

我正在使用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);
    }
}

如果可以的话,我会添加它作为评论(代表低于50)

你可以试着替换

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

编辑:

遍历文件(可能需要调整):

您需要使用:

  @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);
    }
@覆盖
public void sendAttachmentMessage(列表收件人、字符串主题、字符串文本、字符串路径收件人){
MimeMessage message=emailSender.createMimeMessage();
mimessagehelper=null;
试一试{
helper=新的mimessagehelper(消息,true);
setTo(to.toArray(新字符串[to.size()]);
helper.setSubject(subject);
字符串内容=builder.build(文本);
setText(content,true);
FileSystemResource file=newfilesystemresource(新文件(路径到附件));
helper.addAttachment(file.getFilename(),file);
}捕获(消息异常e){
日志错误(“发送带有附件的电子邮件时出错。”,e);
}
emailSender.send(message);
}

这听起来像是我的答案。你为什么要在这种情况下发表评论?因为我只是在猜测。在过去,你会因为猜测而受到批评。如果你不知道,最好不要回答。如果你对自己的答案有点信心,那就开始吧。@DenisKovzelyuk没有用,但谢谢你的想法@Stacie您是否尝试过FileSystemResource allFiles=新的FileSystemResource(新文件(storage.getUploadDir()+“/filename.txt”);如果可行,您可以循环遍历目录中的每个文件,并创建新的附件来解决实际问题,并说明为什么首选您的解决方案。仅供参考-您的堆栈跟踪实际上并没有说明实际问题是什么。它实际上是一个堆栈跟踪元素数组。没有这一点,堆栈跟踪默认是无用的,应该用实际的错误消息来更新。嗯,我觉得我的错误消息和堆栈跟踪是非常模糊和没有帮助的,这就是为什么我要问这个问题。但是再一次,对Java(3mo)来说是相当陌生的,我确信我并不真正理解堆栈跟踪。或者如何真正使用记录器功能。
newclasspathResource(“static/images/Mail_Icon.png”)
返回
null
?不,这不是抛出null指针。尝试添加代码的文件/addAttachment allFiles部分时出现问题。我一直在代码中有邮件图标img,它以前工作过/用邮件图像发送邮件。
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);
    }
}
  @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);
    }