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

Android 11下react-native-mail添加附件致APP崩溃问题求助

问题解决:react-native-mail在Android 11下无法访问缓存文件

问题根源

Android 11(API 30)收紧了应用私有存储的访问权限,你的应用缓存目录属于私有目录,邮件应用无法直接读取该路径下的文件,因此抛出"Failed to find configured root"错误。


方案一:改用公共外部存储目录(最简单)

将PDF文件写入公共的Downloads目录,该目录允许其他应用访问:

  1. 修改文件路径定义:
// 替换CacheDir为DownloadDir
const path = RNFetchBlob.fs.dirs.DownloadDir + '/' + SHA1(this.fileSource.uri) + '.pdf'
  1. 确保应用拥有外部存储权限,在android/app/src/main/AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

方案二:配置FileProvider共享私有缓存文件

如果必须使用应用缓存目录,需通过FileProvider授权邮件应用访问该文件:

  1. 修改AndroidManifest.xml
    在<application>标签内添加FileProvider配置:
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>
  1. 创建路径配置文件
    在android/app/src/main/res/xml/目录下新建file_paths.xml(若xml目录不存在则手动创建),内容如下:
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <!-- 授权共享整个缓存目录 -->
    <cache-path name="cache_files" path="." />
</paths>
  1. 生成Content URI并修改邮件调用代码
    将绝对文件路径转换为FileProvider的Content URI,替换原路径传入Mailer:
import { NativeModules } from 'react-native';

// 动态获取应用包名
const packageName = await NativeModules.PackageInfo.getPackageName();
// 构建Content URI
const contentUri = `content://${packageName}.fileprovider/cache_files/${SHA1(this.fileSource.uri)}.pdf`;

// 修改Mailer调用的attachment配置
Mailer.mail({
    subject: "Subject",
    body: "",
    recipients: [this.props.emailAddress],
    attachment: {
        path: contentUri,
        type: 'application/pdf',
        name: `attachment.pdf`,
    }
}, (error) => {
    // 错误处理
});

注意:需确认你使用的react-native-mail分支支持Content URI作为附件路径,若不支持,需修改该库的Android原生代码,适配Content URI的文件读取逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:05:26