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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:43:20