ASP.NET 中的 mailkit 可以读取配置文件吗?

Can mailkit in ASP.NET read a config file?

我正在尝试在 ASP.NET 核心 3.1 中构建一个网络应用程序来管理公司的客户。当用户在数据库中保存新客户端时,我希望应用程序向客户端发送欢迎邮件。

我尝试用 SmtpClient class 这样做,但微软本身似乎不鼓励这样做:

重要。我们不建议您使用 SmtpClient class 进行新开发,因为 SmtpClient 不支持许多现代协议。请改用 MailKit 或其他库。

所以我决定使用 MailKit library,到目前为止我已经编写了代码:

// Send a welcome email.
MimeMessage message = new MimeMessage();
message.From.Add(new MailboxAddress("CompanyName", "email"));
message.To.Add(MailboxAddress.Parse(obj.Email));
message.Subject = "Welcome mail";
message.Body = new TextPart("plain")
    {
        Text = @"Welcome " + obj.Name + "!"
    };
SmtpClient client = new SmtpClient();
client.Connect("smtp.gmail.com", 465, true);
client.Authenticate("mail", "password");
client.Send(message);
client.Disconnect(true);
client.Dispose();

请注意,上面的代码段是在处理存储新客户端的控制器中编写的。验证并保存数据库更改后,我立即发送电子邮件。

这工作正常,但我想看看是否可以从应用程序文件夹中的配置文件中读取邮件地址、密码、smtp 客户端、端口等所有内容,而不是将它们读取硬编码。我认为 MailKit 无法读取 web.config 文件,我还能做些什么吗?如有任何帮助,我们将不胜感激!

是的,你可以!

在你身上 Startup.cs :

services.Configure<EmailSettings>(Configuration.GetSection("EmailSection"));

创建配置 class 电子邮件设置:

public class EmailSettings
{
    public string Smtp { get; set; }
    public string SendFrom { get; set; }
    public string Password { get; set; }
    public int Port { get; set; }
}

然后把这个加在你身上 appsettings.json :

...
"EmailSection": {
   "Smtp": "smtp.gmail.com",
   "SendFrom": "noreply@domain.com",
   "Password": "123456789",
   "Port": 465
 },
 ...

最后,您可以使用依赖注入来调用您的配置 class 来自控制器的 EmailSettings 或您想要的任何内容:

public class HomeController : Controller
{
   private EmailSettings _emailSettings;
   // Constructor of controller
   public HomeController : Controller (IOptions<EmailSettings> emailSettings)
   {
      _emailSettings = emailSettings.Value;
   }
   
   public IActionResult Index()
   {
      string getSmtp = _emailSettings.Smtp;
      string getPassword = _emailSettings.Password;
      // ...
   }
}