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

Blazor中使用带Subject和Body的mailto链接实现带变量发邮件的问题

问题原因
  • 直接在href属性中拼接未编码的变量值,@ErrorCode、@navigationManager.Uri中如果包含&、空格、换行、中文等特殊字符,会破坏mailto的query参数结构,导致body参数被截断无法识别
  • 手动编写的%0D%0A转义换行符可能在Razor渲染时被二次转义,导致格式失效
解决方案

不要直接在href属性里拼接参数,提前用URL编码方法处理所有参数内容后再生成完整的mailto链接,示例代码如下:

@* 首先注入NavigationManager *@
@inject NavigationManager NavigationManager

@{
    // 1. 直接编写原始的主题、正文内容,不需要手动加转义符
    string mailSubject = $"MessageCode: {ErrorCode}";
    string mailBody = $"Test Test,\r\n\r\nURL: {NavigationManager.Uri}";

    // 2. 对参数单独做URL编码,自动处理所有特殊字符、换行、空格
    string encodedSubject = Uri.EscapeDataString(mailSubject);
    string encodedBody = Uri.EscapeDataString(mailBody);

    // 3. 拼接生成完整的mailto链接
    string fullMailToLink = $"mailto:?subject={encodedSubject}&body={encodedBody}";
}

@* 绑定生成好的链接即可 *@
<a href="@fullMailToLink">发送邮件</a>
实现说明
  • Uri.EscapeDataString是.NET内置的URL参数编码方法,会自动将空格、换行、特殊符号转换为符合URI规范的转义字符,避免破坏参数结构
  • 不需要手动编写%20、%0D%0A这类转义字符,直接写原始文本和换行即可,编码方法会自动处理对应转义
  • 如果需要指定固定收件人,直接把收件人地址写在mailto:后面即可,示例:string fullMailToLink = $"mailto:m.mustermann@domain.de?subject={encodedSubject}&body={encodedBody}";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:10