As per https://medium.com/@MisterKevin_js/enabling-email-verification-in-asp-net-core-identity-ui-2-1-b87f028a97e0
ASP.NET Core 2 relies a lot on dependency injection.
Identity Library's RegisterModel (as well as the other email-dependant models) has the following field:
private readonly IEmailSender _emailSender;
All you have to do is use Startup.cs ConfigureServices method to inject an IEmailSender implemented by yourself:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddTransient<IEmailSender, EmailSender>();
}
You may define this EmailSender class inside a folder named Services in your project:

And a possible implementation would be:
using Microsoft.AspNetCore.Identity.UI.Services;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;
namespace YourProject.Services
{
public class EmailSender : IEmailSender
{
public Task SendEmailAsync(string email, string subject, string htmlMessage)
{
SmtpClient client = new SmtpClient
{
Port = 587,
Host = "smtp.gmail.com", //or another email sender provider
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("your email sender", "password")
};
return client.SendMailAsync("your email sender", email, subject, htmlMessage);
}
}
}