Android使用Intent发送邮件无法识别HTML href标签问题求助
问题根因
- 你当前将
HtmlCompat.fromHtml处理后返回的Spanned对象传入Intent.EXTRA_TEXT,多数主流邮箱客户端(Gmail、雅虎邮箱等)解析该类富文本对象时,仅会保留段落、换行这类基础排版效果,会直接剥离超链接对应的Span信息,导致链接变成纯文本。 - 之前尝试仅传
Intent.EXTRA_HTML_TEXT、留空Intent.EXTRA_TEXT失效的原因是:绝大多数邮箱客户端存在回退逻辑,若未检测到EXTRA_TEXT内容会直接判定邮件内容为空,不会读取EXTRA_HTML_TEXT的内容。
修复方案
同时传入两种格式的内容,兼容不同客户端的解析逻辑:
Intent.EXTRA_HTML_TEXT:传入未做转换的原始HTML字符串Intent.EXTRA_TEXT:传入HTML对应的纯文本内容,作为不支持HTML解析的客户端的回退展示内容
同时修正代码中a标签的href属性未加双引号的问题,避免部分解析器识别失败。
修改后代码
private fun sendToEmailApp(message: Message){ val rawHtml = addHtmlEndLine(message.text) val sendIntent: Intent = Intent().apply { type = "message/rfc822" putExtra(Intent.EXTRA_SUBJECT, message.title) // 传入纯文本作为回退 putExtra(Intent.EXTRA_TEXT, HtmlCompat.fromHtml(rawHtml, HtmlCompat.FROM_HTML_MODE_COMPACT)) // 传入原始HTML供支持的客户端解析 putExtra(Intent.EXTRA_HTML_TEXT, rawHtml) action = Intent.ACTION_SEND } val shareIntent = Intent.createChooser(sendIntent, "\nShare with\n") startActivity(shareIntent) } private fun addHtmlEndLine(messageHtml: String): String{ // 给href属性加双引号,保证语法规范 val htmlUrl = "<a href=\"https://www.somewebsite.com/application/\">mobile app</a>" val htmlEndline = "<br><p>Sent from $htmlUrl.</p>" return messageHtml.plus(htmlEndline) }
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

