dotnet core 2.0中appSettings.json中的SMTP设置

Viq*_*qas 6 c# asp.net .net-core

在Asp.net中,我通常可以使用以下代码发送电子邮件:

using (var smtp = new SmtpClient())
{
    await smtp.SendMailAsync(mailMessage);
}
Run Code Online (Sandbox Code Playgroud)

通过web.config中提供的smtp设置,然后,它们会自动使用SmtpClient。web.config配置部分如下所示:

<mailSettings>
    <smtp deliveryMethod="Network">
      <network host="myHost" port="25" userName="myUsername" password="myPassword" defaultCredentials="false" />
    </smtp>
</mailSettings>
Run Code Online (Sandbox Code Playgroud)

是否可以在dotnet core 2.0应用程序的appSettings.json文件中进行配置,然后由SmtpClient类似于Asp.net 进行使用?

Ale*_*vin 9

您可能想要实现的目标是这样的:

\n

文件:( appsettings.json您定义数据的位置)

\n
{\n    ...\n    "EmailSettings": {\n        "From": "no-reply@example.com",\n        "Username": "username",\n        "Password": "password",\n        "Host": "smtp.example.com",\n        "Port": 25\n    },\n    ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

文件:( Email.cs您在其中定义将包含数据的模型)

\n
public class EmailSettings\n{\n    public string From { get; set; }\n    public string Username { get; set; }\n    public string Password { get; set; }\n    public string Host { get; set; }\n    public int Port { get; set; }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

文件:( Startup.cs将数据绑定到随处可用的模型的位置)

\n
public void ConfigureServices(IServiceCollection services)\n{              \n   ...\n\n     services.AddConfiguration<EmailSettings>(Configuration, "EmailSettings");\n\n   ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

文件:( Email.cs您在其中定义如何发送邮件)

\n
public class EmailService\n{\n    private readonly EmailSettings _mailSettings;\n    public EmailService(EmailSettings mailSettings)\n    {\n        _mailSettings = mailSettings;\n    }\n\n    public async Task<bool> SendMail(MailRequest mailRequest)\n    {\n        //Here goes your code to send a message using "_mailSettings" like:\n        // _mailSettings.From\n        // _mailSettings.Port\n        //ect...\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

为此,请打开本教程并转到名为“ #6 AppSettings \xe2\x80\x93 PRE-Binding ”的方式 6

\n

在那里你会找到不同的方法来完成这项工作,但强烈推荐第六种方法

\n


Hau*_*Haf 5

如果您坚持使用System.Net.Mail.SmtpClient,则可以通过以下方式进行操作:

appsettings.json

{
  "Smtp": {
    "Server": "mail.whatever.com",
    "Port": 25,
    "FromAddress": "yourfromemail@whatever.com"
  },
}
Run Code Online (Sandbox Code Playgroud)

码:

    public async Task SendEmailAsync(string email, string subject, string htmlMessage)
    {
        MailMessage message = new MailMessage();
        message.Subject = subject;
        message.Body = htmlMessage;
        message.IsBodyHtml = true;
        message.To.Add(email);

        string host = _config.GetValue<string>("Smtp:Server", "defaultmailserver");
        int port = _config.GetValue<int>("Smtp:Port", 25);
        string fromAddress = _config.GetValue<string>("Smtp:FromAddress", "defaultfromaddress");

        message.From = new MailAddress(fromAddress);

        using (var smtpClient = new SmtpClient(host, port))
        {
            await smtpClient.SendMailAsync(message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在哪里_config实现的实现IConfiguration被注入到该SendEmailAsync方法所在的类中。

但是,由于它已过时,因此最好探索上面的评论中提到的其他方法。

  • 不过,我不想从 appsettings.json 手动获取 smtp 配置值。我在问这些值是否可以自动使用。 (3认同)