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
相关产品推荐
相关产品推荐

