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

Android Compose中Intent跳转邮件收件人参数不生效问题

问题原因

收件人填充失效是因为你用错了Intent传参的常量:Intent.EXTRA_TEXT的作用是传递邮件正文内容,根本不是用来设置收件人地址的,自然不会生效。

正确的Intent参数对应关系

Android系统邮件Intent的固定参数规则如下:

  • Intent.EXTRA_EMAIL:收件人邮箱地址列表,接收Array<String>类型参数
  • Intent.EXTRA_CC:抄送人邮箱地址列表,接收Array<String>类型参数
  • Intent.EXTRA_BCC:密送人邮箱地址列表,接收Array<String>类型参数
  • Intent.EXTRA_SUBJECT:邮件主题,接收字符串类型参数
  • Intent.EXTRA_TEXT:邮件正文内容,接收字符串或其他支持的富文本类型参数
修正后的可运行代码

建议把Intent初始化逻辑放到点击回调里,同时把收件人直接拼接在mailto:协议的Uri中,兼顾参数正确性和不同设备邮件客户端的兼容性:

@Composable
fun sendEmail(emailIds: Array<String> = arrayOf("your_target_email@example.com")) {
    val context = LocalContext.current
    Button(onClick = {
        val intent = Intent(Intent.ACTION_SENDTO).apply {
            // 拼接收件人到Uri,兼容多数邮件客户端解析逻辑
            data = Uri.parse("mailto:${emailIds.joinToString(separator = ",")}")
            // 用正确的EXTRA_EMAIL传收件人列表
            putExtra(Intent.EXTRA_EMAIL, emailIds)
            putExtra(Intent.EXTRA_SUBJECT, "somesubject")
            // 如果需要填充正文,再使用EXTRA_TEXT传入正文内容
            // putExtra(Intent.EXTRA_TEXT, "这是邮件正文内容")
        }
        context.startActivity(intent)
    }) {
        Text("BUTTON")
    }
}

注意:如果设备上没有安装任何支持mailto协议的邮件客户端,调用startActivity会直接抛出ActivityNotFound异常,线上环境建议加intent.resolveActivity(context.packageManager) != null判断后再触发跳转,避免崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:01:26