ASP.NET身份确认电子邮件是纯文本而不是HTML

本文关键字:文本 HTML ASP 身份 确认 电子邮件 NET | 更新日期: 2023-09-27 18:09:50

当用户注册时,我使用标准代码发送确认电子邮件,这是我在多个项目中做过的事情:

var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href='"" + callbackUrl + "'">here</a>");

通常当收件人收到电子邮件时,它的内容类型是text/html。然而,在这个应用程序中,电子邮件的内容类型是text/plain,并且内容没有呈现为html,而是呈现为纯文本。它应该像这样:

请点击这里确认您的帐户

但是它看起来是这样的:

Please confirm your account by clicking <a href="https://localhost:44309/Account/ConfirmEmail?userId=8b126243-1f78-4e42-87d2-ab3c7c350f99&code=tokengoeshere">here</a>

我搜索了文档,但找不到任何说明为什么会这样或如何改变这种行为的信息。

我还更新到最新版本的Microsoft ASP。. NET Identity Core(2.2.1)认为这可能会有所帮助,但它对问题没有任何影响。

我还测试了从不同组织的Google Apps电子邮件帐户发送(我使用其他具有完全相同代码的应用程序发送此确认电子邮件,并知道它以html发送),以防那里有一些重要的设置。

关于为什么它发送文本/平原和我如何能解决这个问题的想法?

谢谢!

ASP.NET身份确认电子邮件是纯文本而不是HTML

问题很可能与您的身份无关,而可能只是与邮件功能本身有关。您是否将MailMessage.IsBodyHtml属性设置为true?

MailMessage message = new MailMessage(fromEmail, toEmail, subject, body);
message.IsBodyHtml = true; // here

这将把电子邮件的正文设置为HTML格式。默认情况下,该属性为false,因此您需要显式地将其声明为true。

问题可能与您正在使用的邮件服务/api有关。我用过几个,它们通常有一个可选的htmlBody参数或一个isBodyHtml参数。如果你指定你正在使用哪个,或者在EmailService类(在IdentityConfig.cs)中提供SendAsync方法的代码,它可能会很容易为你指出正确的方向。

如果你坚持使用纯文本,你可以发送带有url的纯文本,客户端通常会将其转换为用户的链接。Outlook和gmail都可以。

那么,它看起来应该是这样的:

await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account:" + callbackUrl);

你可以使用SendGrid API发送HTML类型的电子邮件,他们也提供事务性模板。

链接https://sendgrid.com/

甚至在Asp.net核心文档

中建议

https://learn.microsoft.com/en us/aspnet/core/security/authentication/accconfirm?view=aspnetcore - 2.2,标签= visual studio