繁体   English   中英

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

[英]Can mailkit in ASP.NET read a config file?

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

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

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

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

// 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();

请注意,上述代码段是在处理存储新客户端的 controller 中编写的。 在验证并保存数据库更改后,我立即发送 email。

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

是的你可以!

在您的 Startup.cs 中:

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

创建 EmailSettings.cs 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
 },
 ...

最后,您可以使用依赖注入来调用 controller 或任何您想要的配置:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM