如何在ASP.NET Core中发送电子邮件

利用开源MailKit库轻松在ASP.NET Core中发送电子邮件

如何在ASP.NET Core中发送电子邮件

您通常需要通过应用程序发送电子邮件。您可以利用MailKit NuGet包在ASP.NET Core中发送电子邮件MailKit是一个开源邮件客户端库,可以在Windows,Linux或Mac系统上运行的.NET或.NET Core应用程序中使用。本文讨论了如何使用MailKit NuGet包在ASP.NET Core中发送电子邮件。

安装MailKit NuGet软件包

要使用MailKit,您应该从NuGet安装MailKit软件包。您可以通过Visual Studio 2019 IDE中的NuGet程序包管理器来执行此操作,也可以通过在NuGet程序包管理器控制台上执行以下命令来执行此操作:

Install-Package NETCore.MailKit

您还需要在代码中添加对以下命名空间的引用:

using MailKit.Net.Smtp;
using MimeKit; 

在ASP.NET Core中指定电子邮件配置元数据

以下代码段显示了如何在appsettings.json文件中指定电子邮件配置详细信息。

"NotificationMetadata": {
    "Sender": "sender_email@gmail.com",
    "SmtpServer": "smtp.gmail.com",
    "Reciever": "receiver_email@yahoo.com",
    "Port": 465,
    "Username": "sender_email_user@gmail.com",
    "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<NotificationMetadata>();
     services.AddSingleton(notificationMetadata);
     services.AddControllers();
}

在ASP.NET Core中创建EmailMessage类的实例

使用以下代码创建一个名为EmailMessage的新类:

public class EmailMessage
    {
        public MailboxAddress Sender { get; set; }
        public MailboxAddress Reciever { get; set; }
        public string Subject { get; set; }
        public string Content { get; set; }
    } 

在ASP.NET Core中创建MimeMessage类的实例

以下方法说明了如何从自定义类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;
}

使用ASP.NET Core中的MailKit同步发送电子邮件

要发送电子邮件,我们需要利用与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";
}

使用ASP.NET Core中的MailKit异步发送电子邮件

以下代码段说明了我们刚刚编写的异步版本的代码,用于同步发送电子邮件。

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的其他功能。

原创文章,作者:冰封一夏,如若转载,请注明出处:http://www.nncjzx.com/3298.html

关注本站公众号获取更多实时内容

本站微信公众号:二线码农