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

时间:2015-08-24 22:35:41

标签: c# asp.net-mvc-5 asp.net-identity

在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 <a href=\"" + callbackUrl + "\">here</a>");

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

请点击here

确认您的帐户

但它看起来像这样:

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身份核心(2.2.1),这可能有所帮助,但它对此问题没有任何影响。

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

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

谢谢!

2 个答案:

答案 0 :(得分:4)

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

如果您使用纯文本,您可以使用网址发送纯文本,客户端通常会将其转换为用户的链接。 Outlook和gmail就是这样做的。

所以,它看起来像这样:

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

答案 1 :(得分:0)

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

链接

https://sendgrid.com/

Asp.net核心文档中的建议

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/accconfirm?view=aspnetcore-2.2&tabs=visual-studio