ASP5、MVC 6发送邮件
ASP 5, MVC 6 sending email
我正在尝试 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 中不再包含的所有内容的替代品?
.NET Core 目前缺少几个 API。如您所见,这些包括 System.Net.Mail.SmtpClient
和 System.ServiceModel.SyndicationFeed
,它们可用于构建 RSS 或 Atom 提要。解决方法是针对完整的 .NET Framework,而不是 .NET Core。一旦这些 API 可用,您就可以始终以 .NET Core 为目标。
因此,在您的 project.json 文件中,您需要删除对 dnxcore50
的引用,并为 .NET 4.5.1 添加 dnx451
或为 .NET 4.6 添加 dnx46
如果还没有:
"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": {
}
}
}
我的开源 MimeKit and 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", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "chandler@friends.com"));
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);
}
}
}
}
System.Net.Mail 现已移植到 .NET Core。参见 Issue 11792 in the corefx repo. This change will be part of .NET Standard 2.0。
我正在尝试 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 中不再包含的所有内容的替代品?
.NET Core 目前缺少几个 API。如您所见,这些包括 System.Net.Mail.SmtpClient
和 System.ServiceModel.SyndicationFeed
,它们可用于构建 RSS 或 Atom 提要。解决方法是针对完整的 .NET Framework,而不是 .NET Core。一旦这些 API 可用,您就可以始终以 .NET Core 为目标。
因此,在您的 project.json 文件中,您需要删除对 dnxcore50
的引用,并为 .NET 4.5.1 添加 dnx451
或为 .NET 4.6 添加 dnx46
如果还没有:
"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": {
}
}
}
我的开源 MimeKit and 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", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "chandler@friends.com"));
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);
}
}
}
}
System.Net.Mail 现已移植到 .NET Core。参见 Issue 11792 in the corefx repo. This change will be part of .NET Standard 2.0。