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.