Отправить письмо с .NET Core 2.2 - PullRequest
0 голосов
/ 06 ноября 2019

В MVC ASP.NET вы можете установить конфигурацию smtp в файле web.config следующим образом:

<system.net>
    <mailSettings>
        <smtp from="MyEmailAddress" deliveryMethod="Network">
            <network host="smtp.MyHost.com" port="25" />
        </smtp>
    </mailSettings>
</system.net>

И это прекрасно работает.

Но я не могу ее получитьработать в .NET Core 2.2, потому что там у вас есть файл appsettings.json.

У меня есть это:

"Smtp": {
    "Server": "smtp.MyHost.com",
    "Port": 25,
    "FromAddress": "MyEmailAddress"
}

При отправке письма отображается следующее сообщение об ошибке:

enter image description here

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Чтобы получить настройки Smtp из appsettings.json, вы можете использовать

public class SmtpSettings{
  public string Server {get;set;}
  public int Port {get;set;}
  public string FromAddress {get;set}
}

var smtpSettings = Configuration.GetSection("Smtp").Bind(smtpSettings);

Теперь, когда у вас есть настройки smtp, вы можете использовать их в SmtpClient()

 using (var client = new SmtpClient()){
    {
        await client.ConnectAsync(smtpSettings.Server, smtpSettings.Port, true);
    }
 }
0 голосов
/ 07 ноября 2019

Вы можете использовать Options с DI в отправителе электронной почты, см.

https://kenhaggerty.com/articles/article/aspnet-core-22-smtp-emailsender-implementation

1.appsettings.json

"Smtp": {
    "Server": "smtp.MyHost.com",
    "Port": 25,
    "FromAddress": "MyEmailAddress"
}

2.SmtpSettings.cs

public class SmtpSettings
{
    public string Server { get; set; }
    public int Port { get; set; }
    public string FromAddress { get; set; }
}

3.Запуск ConfigureServices

public class Startup
{
    IConfiguration Configuration;

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {

        services.Configure<SmtpSettings>(Configuration.GetSection("Smtp"));
        services.AddTransient<IEmailSender, EmailSender>();

        services.AddMvc();
    }
}

4.Доступ к настройкам Smtp с помощью Options от DI, где вам нужно.

public class EmailSender : IEmailSender
{
    private readonly SmtpSettings _smtpSettings;

    public EmailSender(IOptions<SmtpSettings> smtpSettings)
    {
        _smtpSettings = smtpSettings.Value;

    }
    public Task SendEmailAsync(string email, string subject, string message)
    {
        var from = _smtpSettings.FromAddress;
        //other logic
        using (var client = new SmtpClient())
        {
            {
                await client.ConnectAsync(smtpSettings.Server, smtpSettings.Port, true);
            }
        }
        return Task.CompletedTask;
    }
}
...