ASP.NET MVC 忘记密码电子邮件链接未格式化为 Html

康纳8630

我正在尝试设置忘记密码功能,但我无法获取带有链接格式的电子邮件正文。我认为电子邮件不是为 Html 设置的。

 void sendMail(IdentityMessage message)
    {
        #region formatter
        string text = string.Format("", message.Subject, message.Body);
        string html = "";

        html += HttpUtility.HtmlEncode(@"" + message.Body);
        #endregion

        MailMessage msg = new MailMessage();
        msg.From = new MailAddress(ConfigurationManager.AppSettings["Email"].ToString());
        msg.To.Add(new MailAddress(message.Destination));
        msg.IsBodyHtml = true;
        msg.Subject = message.Subject;
        msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html));
        msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html));

        SmtpClient smtpClient = new SmtpClient("smtp-mail.outlook.com", Convert.ToInt32(587));
        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["Email"].ToString(), ConfigurationManager.AppSettings["Password"].ToString());
        smtpClient.Credentials = credentials;
        smtpClient.EnableSsl = true;

        smtpClient.Send(msg);
    }

我如何使用它:

await UserManager.SendEmailAsync(user.Id, "Holiday Tracker Reset Password", "Please reset your password by using the following link.   <a href=\"" + callbackUrl + "\">here </a> ");

我希望代码能够工作,以便电子邮件具有可点击的链接,而不仅仅是网址的长字符串。

阿戴森

您尚未提供任何消息正文数据示例,或生成的电子邮件的示例源标记,因此很难 100% 找到根本原因,但这里有一些小问题可能会有所贡献:

1) 您实际上从未设置过电子邮件的正文。您设置了替代视图,但不是基体。因此,即使您设置了 IsBodyHtml 选项,它也没有任何作用。

2) 您添加了两个相同的替代视图。这可能无关紧要,但显然是多余的。如果您已将正文设置为 HTML,然后实际包含正文文本,则无论如何您都不需要这些替代视图。

3) 以上是小问题,但我认为这是关键:我强烈怀疑您误解了HttpUtility.HtmlEncode() 的作用。

考虑以下示例:

string myString = "<b>Hello World</b>";
// Encode the string.
string myEncodedString = HttpUtility.HtmlEncode(myString);

Console.WriteLine($"HTML Encoded string is: {myEncodedString}");
StringWriter myWriter = new StringWriter();

// Decode the encoded string.
HttpUtility.HtmlDecode(myEncodedString, myWriter);
string myDecodedString = myWriter.ToString();
Console.Write($"Decoded string of the above encoded string is: {myDecodedString}");

这将输出:

HTML Encoded string is: &lt;b&gt;Hello World&lt;/b&gt;
Decoded string of the above encoded string is: <b>Hello World</b>

现场演示:https : //dotnetfiddle.net/9j46WN

如您所见,对包含 HTML 的字符串进行编码会将 HTML 控制字符转换为它们的编码表示。这通常用于确保字符在查看时被视为 HTML(即,它们被视为要显示在屏幕上的文本片段,而不是被解释为 HTML 文档标记的一部分)。这与您想要的完全相反。

例如,当我将这两个字符串作为原始标记(而不是“代码”块)放入HTML 页面时,结果为:


HTML 编码字符串为:<b>Hello World</b>

上述编码字符串的解码字符串为:Hello World


请注意编码后的 HTML 是如何显示而不是使用它的?

所以我认为你可以放弃 Html 编码。假设您已经在 中为您的方法提供了 HTML 标记message.Body,那么您可以按原样使用它。如果您以正常方式设置消息正文,您也应该能够免除其他视图。这是我认为您的代码应该更改为:

void sendMail(IdentityMessage message)
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress(ConfigurationManager.AppSettings["Email"].ToString());
    msg.To.Add(new MailAddress(message.Destination));
    msg.IsBodyHtml = true;
    msg.Body = message.Body;
    msg.Subject = message.Subject;

    SmtpClient smtpClient = new SmtpClient("smtp-mail.outlook.com", Convert.ToInt32(587));
    System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["Email"].ToString(), ConfigurationManager.AppSettings["Password"].ToString());
    smtpClient.Credentials = credentials;
    smtpClient.EnableSsl = true;

    smtpClient.Send(msg);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

HTML动作链接asp.net mvc

来自分类Dev

ASP.Net MVC SQL格式化HTML

来自分类Dev

ASP.Net MVC身份忘记密码

来自分类Dev

在 ASP.NET MVC 中将 JSON 格式化为数组

来自分类Dev

屏蔽电子邮件的ASP.NET MVC ModelState验证

来自分类Dev

在ASP.NET MVC中创建电子邮件模板

来自分类Dev

电子邮件确认Asp.net MVC

来自分类Dev

使用asp.net mvc发送电子邮件

来自分类Dev

如何在ASP.NET MVC5 Identity 2中添加HTML电子邮件模板以进行电子邮件确认?

来自分类Dev

ASP.NET MVC HTML列显示

来自分类Dev

ASP.NET MVC中的HTML编码

来自分类Dev

发送忘记密码到电子邮件 Asp.net 代码错误

来自分类Dev

防止未确认电子邮件的用户登录ASP.NET MVC Web API身份(OWIN安全)

来自分类Dev

如何在ASP.Net Core MVC中使用HTML链接?

来自分类Dev

ASP.NET MVC3链接与@ Html.Raw中的图像

来自分类Dev

在 ASP.NET MVC 5 中使用 tinyMCE 获取和设置 html 格式

来自分类Dev

ASP NET MVC和HTML5音频-文件未播放

来自分类Dev

Javascript电子邮件验证错误(在ASP.Net中有效,而在ASP.Net MVC中无效)

来自分类Dev

当我在asp.net页面中显示Outlook HTML电子邮件正文时,未显示Outlook电子邮件图片附件

来自分类Dev

ASP.NET MVC 日期输入格式

来自分类Dev

在ASP.NET MVC视图中呈现HTML文件?

来自分类Dev

如何在ASP.NET MVC中配置HTML压缩

来自分类Dev

ASP.NET MVC将ViewResult返回为html文件

来自分类Dev

ASP.Net MVC:HTML元素属性中的单引号

来自分类Dev

在ASP.NET MVC中将HTML转换为PDF

来自分类Dev

关于html解码和编码类型ASP.NET MVC

来自分类Dev

ASP.NET MVC Route Doesn't Work With .html Extension

来自分类Dev

Asp .Net MVC中的枚举的HTML帮助器

来自分类Dev

HTML`id`属性与ASP.NET MVC`id`约定冲突

Related 相关文章

热门标签

归档