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