Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET Identity Confirmation Email Is Plain Text Instead of HTML

In an ASP.NET MVC5 C# application I am using the standard code for sending confirmation emails when a user registers, something I've done in multiple projects:

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

Normally when the recipient receives the email, it's content-type is text/html. However, in this one application, the emails arrive with content-type text/plain and the content is not rendered as html, it is rendered as plain text. It should like this:

Please confirm your account by clicking here

But it looks like this:

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

I searched the docs but cannot find any information that indicates why this would be or indeed how to change this behavior.

I also updated to the latest version of the Microsoft ASP.NET Identity Core (2.2.1) thinking that might help, but it didn't have any effect on the issue.

I also tested sending from a Google Apps email account for a different organization (which I use for other apps with this exact same code to send this confirmation email and know it sends as html) in case there are some settings in there that matter.

Any ideas on why it sends as text/plain and how I can fix this?

Thanks!

like image 376
agileMike Avatar asked Aug 24 '15 22:08

agileMike


2 Answers

The problem more than likely isn't with your Identity, it is probably just with the mail function itself. Have you set the MailMessage.IsBodyHtml property to true?

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

This will set the body of the email to be rendered as HTML. By default, the property is false, so you need to explicitly declare it to be true.

like image 191
user1666620 Avatar answered Sep 26 '22 02:09

user1666620


The issue is likely with the mail service/api you're using. I have used several and they generally have either an optional htmlBody parameter or an isBodyHtml parameter. If you specify which one you're using, or provide the code for the SendAsync Methos in the EmailService class (in IdentityConfig.cs), it'll probably be easy to point you in the right direction.

If your stuck with plain text, you can send plain text with a url and the client will often convert it into a link for the user. Outlook and gmail do this.

So, it would look like this instead:

await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account:" + callbackUrl);
like image 21
Daniel Avatar answered Sep 24 '22 02:09

Daniel