Flutter中mailto链接邮件正文(body)无法换行问题求助
Flutter 邮件唤起正文无法换行的解决办法
问题核心:使用mailto协议唤起邮件时,主题的换行能正常生效,但正文始终显示为一行——这是因为不同邮件客户端对换行符的编码兼容不同,仅用\n或\r\n直接传入Uri的queryParameters,会被自动编码为%0A,部分客户端(如Gmail)不识别单个%0A作为换行标记。
可行解决方案
将正文中的换行统一替换为\r\n,确保Uri编码后生成%0D%0A(标准的URL换行编码),这是多数邮件客户端认可的换行格式。
修改后的代码示例
final body = '123\n===\n444'.replaceAll('\n', '\r\n'); // 替换所有单换行符为\r\n final subject = 'bb123\n===\n444'; final Uri emailLaunchUri = Uri( scheme: 'mailto', path: '*****@gmail.com', queryParameters: { 'subject': subject, 'body': body, }, ); await launchUrl(emailLaunchUri);
另一种手动编码方式
如果上述方式仍有问题,可以直接手动编码参数后拼接Uri:
final body = '123\r\n===\r\n444'; final subject = 'bb123\r\n===\r\n444'; // 手动编码参数,确保换行符被正确转换 final encodedSubject = Uri.encodeComponent(subject); final encodedBody = Uri.encodeComponent(body); final Uri emailLaunchUri = Uri.parse( 'mailto:*****@gmail.com?subject=$encodedSubject&body=$encodedBody', ); await launchUrl(emailLaunchUri);
内容的提问来源于stack exchange,提问作者matti peter
相关产品推荐
相关产品推荐

