asp.net发送电子邮件
您通常需要通过应用程序发送电子邮件。 您可以利用MailKit NuGet包在ASP.NET Core中发送电子邮件。 MailKit是一个开源邮件客户端库,可以在Windows,Linux或Mac系统上运行的.NET或.NET Core应用程序中使用。 本文讨论了如何使用MailKit NuGet包在ASP.NET Core中发送电子邮件。
若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。
[ 也在InfoWorld上:为Windows 10X和Surface Neo开发 ]
创建一个ASP.NET Core API项目
首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
- 点击下一步。
- 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
- 单击创建。
- 在“创建新的ASP.Net Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。 我将在这里使用ASP.NET Core 3.0。
- 选择“ API”作为项目模板以创建新的ASP.NET Core API应用程序。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不使用这些功能。
- 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
- 单击创建。
这将在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": "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";
}
[ 同样在InfoWorld上:Git和GitHub用户的27个基本技巧 ]
使用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的其他功能。
翻译自: https://www.infoworld.com/article/3534690/how-to-send-emails-in-aspnet-core.html
asp.net发送电子邮件