Кодирование ссылки mailto в MVC Razor

У меня есть следующая модель

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

mailbody содержит фактический текст, который является частью тела письма. Этот текст содержит длинный текст [содержит специальные символы, такие как?<и т. д. и может содержать пробелы в строках и т. д.] Я хочу создать HTML-тег mailto в частичном представлении, и я попробовал 3 разных подхода, и в какой-то момент моя ссылка на mailto не открыла почтовый клиент по умолчанию, я думаю, что причиной было экранирование HTML или Url [Я показываю содержимое mailbody в текстовой области, чтобы убедиться, что значение приходит правильно] Вот мой взгляд

@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

1 ответ

Пытаться Url.Encode метод, поскольку вы могли пропустить некоторые специальные символы в вашем коде для ручного кодирования.

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

Также обратите внимание, что может быть ограничение на длину href приписывать. Смотрите этот ответ для более подробной информации.

Если вы планируете отправлять документ в формате HTML по электронной почте (например, используя представление MVC в качестве основы для электронной почты), создавая ссылку на почту, которую будут отображать другие системы электронной почты, такие как Outlook, GMail, Zoho и т. Д. и правильно реагировать может быть сложно.

Вот как я это делаю: Используйте Uri.EscapeDataString для каждого из фрагментов данных в ссылке. Таким образом, двоеточие: после mailto сохраняется и не кодируется, как и & и? персонажи. Когда я попытался скрыть или закодировать весь URL-адрес, я получил очень плохие результаты, как только получающая система электронной почты закончила его декодирование.

Это может быть не совсем то, что вы делаете со своими взглядами, но я не был уверен.

Подводя итог, ваша ссылка будет выглядеть примерно так в представлении:

<a href="mailto:@Uri.EscapeDataString(Model.emailto)?Subject=@Uri.EscapeDataString(Model.emailSubject)&body=@Uri.EscapeDataString(Model.body)">Send Mail</a>
Другие вопросы по тегам