MVC Razor中的mailto链接编码

时间:2015-10-13 08:23:47

标签: razor asp.net-mvc-5 mailto

我有以下型号

public class EmailLinkModel
{
    public string mailbody { get; set; }
    public string emailSubject { get; set; }
    public string emailto { get; set; }        
}

mailbody包含实际文本,它是邮件正文的一部分。这个文本包含一个长文本[包含特殊字符? <等,可以包含换行符等空间] 我想在局部视图中创建mailto html标记,我尝试了3种不同的方法,在某些时候我的mailto链接没有打开默认的邮件客户端 我认为原因是Html或Url ecnoding [我在文本区域显示邮件内容以确保价值正确到来] 这是我的观点

@model RoyaltyDb.Models.EmailLinkModel
@{
    Layout = null;
}
<div class="row ">
    @{
        var formatted_doc_data = Model.mailbody;
        /*
        var formatted_doc_data =HttpUtility.HtmlEncode(Model.mailbody);
          */

      /*  var formatted_doc_data = Model.mailbody.ToString().Trim().Replace("\n", "%0D%0A");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace(" ", "%20");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace(" ", "%20");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace("%", "%25");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace("?", "%3F");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace("/", "%2F");
        formatted_doc_data = formatted_doc_data.ToString().Trim().Replace(":", "%3A");*/
    }
    <a class="btn btn-primary center" href="mailto:@Model.emailto?Subject=@Model.emailSubject&body=@formatted_doc_data" target="_top">Send Mail</a>
</div>
<hr/>
<div class="row">
    @Html.TextAreaFor(m => m.mailbody, new { style = "width: 100%; height:200px;margin:5px 5px;" })
</div>

如何进行正确的编码以创建mailto链接

2 个答案:

答案 0 :(得分:3)

尝试Url.Encode方法,因为您可能错过了代码中的一些特殊字符进行手动编码。

<a class="btn btn-primary center"
   href="mailto:@Model.emailto?Subject=@Model.emailSubject&body=@Url.Encode(Model.body)">Send Mail</a>

另请注意,href属性的长度可能有限制。有关详细信息,请参阅this answer

答案 1 :(得分:0)

如果您打算通过电子邮件发送HTML格式的文档(例如,使用MVC视图作为电子邮件的基础),请创建与其他电子邮件系统(例如Outlook,GMail,Zoho等)链接的mailto链接。将渲染并正确响应可能会很棘手。

这是我的操作方式:在链接中的每条数据上使用Uri.EscapeDataString。这样,冒号:mailto被保留且未编码后,&和?也是如此。字符。当我尝试转义或编码整个URL时,一旦接收电子邮件系统完成对它的解码,结果将非常糟糕。

这可能不是您对视图所做的明确操作,但我不确定。

总而言之,您的链接在“视图”中看起来像这样:

<a href="mailto:@Uri.EscapeDataString(Model.emailto)?Subject=@Uri.EscapeDataString(Model.emailSubject)&body=@Uri.EscapeDataString(Model.body)">Send Mail</a>