在 ASP NET MVC 6 项目中使用 System.Net.Mail

Using System.Net.Mail in ASP NET MVC 6 project

我在 ASP NET 5 项目中创建简单的模拟邮件发件人时遇到问题。

这里是方法:

    public static Task SendMail(string Email, string Subject, string Body)
    {
        SmtpClient client = new SmtpClient();
        client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
        client.PickupDirectoryLocation = "C:\TMP";

        MailAddress from = new MailAddress("jane@contoso.com", "Jane " + (char)0xD8 + " Clayton", System.Text.Encoding.UTF8);
        MailAddress to = new MailAddress(Email);

        MailMessage message = new MailMessage(from, to);
        message.Body = Body;
        message.BodyEncoding = System.Text.Encoding.UTF8;
        message.Subject = Subject;
        message.SubjectEncoding = System.Text.Encoding.UTF8;

        client.Send(message);
        message.Dispose();

        return Task.FromResult(0);
    }

我已经包含了依赖项 'System.Net.Mail',但是工具提示说该库在 DNX 4.5.1 中可用,但在 DNX Core 5.0 中不可用,并且该项目将无法编译。

在我的 project.json 中有:

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
}

我不认为 SmtpClient 正在移植到 .Net Core。 (您可以使用 unofficial reverse package lookup 查找新的 NuGet 包,但没有。)

由于您不需要 .Net Core,您可以从 project.json 中的 frameworks 中删除 dnxcore50 条目。

从今天开始,除了 net451(以及许多其他平台)之外,现在还可以使用 MailKit

在 dnxcore50 上发送电子邮件

我正在使用 ASP.NET 5 的 rc1,并将这些依赖项添加到我的 project.json 中以引入所需的 nugets

"MimeKit": "1.3.0-beta1",
"MailKit": "1.3.0-beta1"

所以 dnxcore50 中缺少 System.Net.Mail 不再是问题,MailKit 库实际上比任何旧的 System.Net.Mail 东西都更丰富。

非常感谢 Jeffrey Stedfast 的辛勤工作。

对于 .NET Core,请务必通过更新 project.json 将其添加为依赖项来获取 MailKit...

"MailKit": "~1.6.0"

有关完整示例,请参阅 GitHub 上的 MailKit: https://github.com/jstedfast/MailKit

如果您在 Visual Studio 2017 年设置了项目,那么此解决方案将有效:

  1. 编辑项目的 .csproj 文件。右键单击项目名称并选择 'Edit Project1.csproj'(如果您的项目名称是 Project1)。项目的 XML 文件打开。将 'TargetFramework' 更改为 net452 并添加值为 win7-x86 的 'RuntimeIdentifier' 标记。所以它看起来像这样:

    [物业组] [目标框架]net452[/目标框架] [运行时标识符]win7-x86[/运行时标识符] [/PropertyGroup]

(替换所有括号bij 'less than'和'greater than'符号) 您的项目将链接到 .NET Framework 4.5.2,然后所有库都可用,包括 System.NET.Mail 命名空间。

对我来说,这是一个可行的解决方案...:-)