您通常需要通过应用程序发送电子邮件。 您可以利用MailKit NuGet包在ASP.NET Core中发送电子邮件。 MailKit是一个开源邮件客户端库,可以在Windows,Linux或Mac系统上运行的.NET或.NET Core应用程序中使用。 本文讨论了如何使用MailKit NuGet包在ASP.NET Core中发送电子邮件。
若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。
首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。
这将在Visual Studio中创建一个新的ASP.NET Core API项目。 在“解决方案资源管理器”窗口中选择Controllers解决方案文件夹,然后单击“添加-> Controller…”以创建一个名为DefaultController的新控制器。 我们将在本文的后续部分中使用该项目。
要使用MailKit,您应该从NuGet安装MailKit软件包。 您可以通过Visual Studio 2019 IDE中的NuGet程序包管理器来执行此操作,也可以通过在NuGet程序包管理器控制台上执行以下命令来执行此操作:
Install-Package NETCore.MailKit
您还需要在代码中添加对以下命名空间的引用:
using MailKit.Net.Smtp;
using MimeKit;
以下代码段显示了如何在appsettings.json文件中指定电子邮件配置详细信息。
"NotificationMetadata": {
"Sender": "[email protected]",
"SmtpServer": "smtp.gmail.com",
"Reciever": "[email protected]",
"Port": 465,
"Username": "[email protected]",
"Password": "specify your password here"
}
要读取电子邮件配置数据,我们将利用以下类。
public class NotificationMetadata
{
public string Sender { get; set; }
public string Reciever { get; set; }
public string SmtpServer { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
这是如何将电子邮件配置数据从appsettings.json文件读取到NotificationMetadata类的实例中的方法。
public void ConfigureServices(IServiceCollection services)
{
var notificationMetadata =
Configuration.GetSection("NotificationMetadata").
Get();
services.AddSingleton(notificationMetadata);
services.AddControllers();
}
使用以下代码创建一个名为EmailMessage的新类:
public class EmailMessage
{
public MailboxAddress Sender { get; set; }
public MailboxAddress Reciever { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
}
以下方法说明了如何从我们的自定义类EmailMessage的实例创建MimeMessage实例。
private MimeMessage CreateMimeMessageFromEmailMessage(EmailMessage message)
{
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(message.Sender);
mimeMessage.To.Add(message.Reciever);
mimeMessage.Subject = message.Subject;
mimeMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text)
{ Text = message.Content };
return mimeMessage;
}
要发送电子邮件,我们需要利用与MailKit.Net.Smtp命名空间有关的SmtpClient类。 以下代码段说明了如何完成此操作。
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
}
为了方便起见,这是DefaultController类的Get操作方法的完整代码。
public string Get()
{
EmailMessage message = new EmailMessage();
message.Sender = new MailboxAddress("Self", _notificationMetadata.Sender);
message.Reciever = new MailboxAddress("Self", _notificationMetadata.Reciever);
message.Subject = "Welcome";
message.Content = "Hello World!";
var mimeMessage = CreateEmailMessage(message);
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
}
return "Email sent successfully";
}
以下代码段说明了我们刚刚编写的异步版本的代码,用于同步发送电子邮件。
using (SmtpClient smtpClient = new SmtpClient())
{
await smtpClient.ConnectAsync(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, true);
await smtpClient.AuthenticateAsync(_notificationMetadata.UserName,
_notificationMetadata.Password);
await smtpClient.SendAsync(mimeMessage);
await smtpClient.DisconnectAsync(true);
}
最后,请注意,MailKit还允许您使用模板甚至包含附件的电子邮件发送电子邮件。 我将在以后的文章中演示MailKit的其他功能。
From: https://www.infoworld.com/article/3534690/how-to-send-emails-in-aspnet-core.html