ASP 5, MVC 6 отправка электронной почты

Я борюсь с ASP 5/MVC 6, и я обнаружил, что больше не знаю, как делать самые простые вещи. Например, как вы отправляете электронное письмо?

В мире MVC 5 я бы сделал что-то вроде этого:

using (var smtp = new SmtpClient("localhost"))
{
    var mail = new MailMessage
    {
        Subject = subject,
        From = new MailAddress(fromEmail),
        Body = message
    };

    mail.To.Add(toEmail);
    await smtp.SendMailAsync(mail);
}

Теперь этот код больше не компилируется, поскольку System.Net.Mail больше не существует. После некоторого толчка вокруг Интернета кажется, что он больше не включается в новое ядро ​​(dnxcore50). Это подводит меня к моему вопросу...

Как вы отправляете электронное письмо в новом мире?

И более широкий вопрос о том, где вы находите заменители всех вещей, которые больше не включают в ядро ​​.Net?

Ответы

Ответ 1

У .NET Core на данный момент есть несколько отсутствующих API. К ним относятся System.Net.Mail.SmtpClient, как вы нашли, а также System.ServiceModel.SyndicationFeed тоже, которые можно использовать для создания RSS или Atom-фидов. Обходной путь для этого - нацелиться на полную .NET Framework, а не на .NET Core. Вы всегда можете нацелиться на .NET Core, как только эти API станут доступными.

Итак, в файле project.json вам нужно удалить ссылку на dnxcore50 и добавить dnx451 для .NET 4.5.1 или dnx46 для .NET 4.6, если она еще не существует:

"frameworks": {
  "dnx451": {
    "frameworkAssemblies": {
      "System.ServiceModel": "4.0.0.0"
      // ..Add other .NET Framework references.
    }
  },
  // Remove this to stop targeting .NET Core.
  // Note that you can't comment it out because project.json does not allow comments.
  "dnxcore50": {            
    "dependencies": {
    }
  }
}

Ответ 2

Мой открытый MimeKit и MailKit библиотеки теперь поддерживают dnxcore50, которые обеспечивают действительно хороший API для создания и отправки электронной почты. В качестве дополнительного бонуса MimeKit поддерживает подписи DKIM, которые становятся все более и более обязательной функцией.

using System;

using MailKit.Net.Smtp;
using MailKit;
using MimeKit;

namespace TestClient {
    class Program
    {
        public static void Main (string[] args)
        {
            var message = new MimeMessage ();
            message.From.Add (new MailboxAddress ("Joey Tribbiani", "[email protected]"));
            message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "[email protected]"));
            message.Subject = "How you doin'?";

            message.Body = new TextPart ("plain") {
                Text = @"Hey Chandler,

I just wanted to let you know that Monica and I were going to go play some paintball, you in?

-- Joey"
            };

            using (var client = new SmtpClient ()) {
                client.Connect ("smtp.friends.com", 587, false);

                // Note: only needed if the SMTP server requires authentication
                client.Authenticate ("joey", "password");

                client.Send (message);
                client.Disconnect (true);
            }
        }
    }
}

Ответ 3

System.Net.Mail теперь перенесен в .NET Core. См. Проблема 11792 в реестре corefx. Это изменение будет частью .NET Standard 2.0.