ASP.NET Core 教程:如何发送电子邮件?

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

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。

创建一个ASP.NET Core API项目

首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。
  7. 在“创建新的ASP.Net Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。 我将在这里使用ASP.NET Core 3.0。
  8. 选择“ API”作为项目模板以创建新的ASP.NET Core API应用程序。
  9. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
  10. 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
  11. 单击创建。

这将在Visual Studio中创建一个新的ASP.NET Core API项目。 在“解决方案资源管理器”窗口中选择Controllers解决方案文件夹,然后单击“添加-> Controller…”以创建一个名为DefaultController的新控制器。 我们将在本文的后续部分中使用该项目。

安装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": "[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();
}

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

From: https://www.infoworld.com/article/3534690/how-to-send-emails-in-aspnet-core.html

你可能感兴趣的:(asp.net)