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

在ASP.NET MVC5 C#应用程序中,我使用标准代码在用户注册时发送确认电子邮件,这是我在多个项目中完成的事情:

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 here"); 

通常,当收件人收到电子邮件时,其内容类型为text / html。 但是,在这一个应用程序中,电子邮件以内容类型text / plain到达,内容不呈现为html,它呈现为纯文本。 它应该是这样的:

请点击此处确认您的帐户

但它看起来像这样:

 Please confirm your account by clicking here 

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

我还更新了最新版本的Microsoft ASP.NET身份核心(2.2.1),这可能有所帮助,但它对此问题没有任何影响。

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

关于它为什么以text / plain发送的任何想法以及我如何解决这个问题?

谢谢!

问题可能出在您使用的邮件服务/ api上。 我使用了几个,他们通常有一个可选的htmlBody参数或一个isBodyHtml参数。 如果您指定了您正在使用的那个,或者在EmailService类(在IdentityConfig.cs中)中提供SendAsync Methos的代码,那么可能很容易指向正确的方向。

如果您坚持使用纯文本,则可以使用url发送纯文本,客户端通常会将其转换为用户的链接。 Outlook和Gmail执行此操作。

所以,它看起来像这样:

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

问题很可能不在于你的身份,它可能只是邮件function本身。 您是否将MailMessage.IsBodyHtml属性设置为true?

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

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