我有以下型号
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链接
答案 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>