You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java发送带附件邮件遇异常,已检查权限仍无法解决

Java发送带附件邮件异常问题排查

问题描述

实现Java发送带附件邮件时触发异常,已检查目标文件权限但问题仍存在。

相关代码

private void sendOceanDashboardSummary(String subject, String mailId, Map<String, Object> data) {
    try {
      String filePath = "C:\\Users\\Chandana\\File";
      String fileName = "Ocean_Dashboard_Summary";

      File file = new File(filePath);
      System.out.println("File exists: " + file.exists());
      System.out.println("File is readable: " + file.canRead());

      if (file.exists() && file.canRead()) {
        EmailMessageBuilder message = new EmailMessage.Builder().subject(subject)
            .withTemplate(PublicanConstants.ALERT_MAIL_TEMPLATE2, data).withHtmlContent();

        InputStream stream = Files.newInputStream(Paths.get(filePath));

        message.addFileAttachment(stream, fileName, "application/octet-stream");

        EmailMessage emailMessage = message.to(mailId).build();
        emailService.send(emailMessage);

        LOGGER.info("Email sent with the Ocean Dashboard Summary attachment.");
      } else {
        LOGGER.error("File does not exist or is not readable.");
      }
    } catch (Exception e) {
      LOGGER.error("Error occurred in attaching and sending the Ocean Dashboard Summary file.", e);
    }
  }

// 调用代码
String subject = "Test mail with attachments";
String mailId = "*****";
Map<String, Object> data = new HashMap<>();
this.sendOceanDashboardSummary(subject, mailId, data);

报错信息

java.io.FileNotFoundException: C:\Users\Chandana\File (拒绝访问)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
    at java.base/sun.nio.fs.WindowsFileSystemProvider.newInputStream(WindowsFileSystemProvider.java:123)
    at java.base/java.nio.file.Files.newInputStream(Files.java:159)
    at com.example.YourClass.sendOceanDashboardSummary(YourClass.java:XX)

文件权限情况

目标路径C:\Users\Chandana\File对应的权限显示当前用户拥有读取和执行权限,无写入限制。

问题分析与解决方案

1. 路径指向文件夹而非文件

代码中filePath设置为C:\\Users\\Chandana\\File,如果这是一个文件夹路径,Files.newInputStream无法打开文件夹的输入流,会触发拒绝访问异常。

解决: 修改filePath为具体的文件路径,比如:

String filePath = "C:\\Users\\Chandana\\File\\Ocean_Dashboard_Summary.xlsx"; // 根据实际文件后缀调整

2. 权限深层限制

即使文件权限显示可读,Windows系统的UAC(用户账户控制)可能限制程序访问用户目录下的文件。

解决:

  • 尝试以管理员身份运行程序;
  • 检查目标文件是否被其他应用(如Excel、记事本)占用,关闭占用进程后重试。

3. 输入流未关闭

代码中手动打开InputStream但未关闭,可能导致资源泄漏,也可能影响邮件发送流程。

解决: 使用try-with-resources语法自动关闭流:

try (InputStream stream = Files.newInputStream(Paths.get(filePath))) {
    message.addFileAttachment(stream, fileName, "application/octet-stream");
    // 后续邮件构建与发送逻辑
}

内容的提问来源于stack exchange,提问作者Siva chandana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:54:52