【问题标题】:Using System.Net.Mail in ASP NET MVC 6 project在 ASP NET MVC 6 项目中使用 System.Net.Mail
【发布时间】:2015-07-29 17:54:20
【问题描述】:

我在 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。 (您可以使用packagesearch.azurewebsites.net 查找新的 NuGet 包,但没有。)您需要 .Net Core 吗?
  • 不,你是对的:因为它默认包含在项目模板中,所以我认为我需要它,但没有它它也能正常工作。谢谢!

标签: .net asp.net-core-mvc smtpclient system.net.mail mailkit


【解决方案1】:

从今天开始,除了 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 的辛勤工作。

【讨论】:

  • 向 Jeffrey Stedfast 致敬,但他的工作不应该是必要的。电子邮件是大多数 Web 应用程序的重要部分:注册确认、密码恢复、论坛响应通知、订单确认等。我们在 RC 中没有邮件类端口的事实有点令人失望。如果一个开发人员可以编写 MailKit,那么一个在 ASP.net 上工作的聪明的微软团队怎么能不移植旧代码呢?阻碍 Linux/OSX 作为可行的替代方案?我正在挖掘很多新功能/特性,但这似乎是一个非常严重的遗漏。
  • @Sam 不要在 Stack Overflow 上进行冗长的讨论,但我认为有句格言:你怎么吃大象?一次咬一口。当然适用于微软在 .NET Core 上所做的工作。
  • 查看 GitHub 上的 .Net Core 待办事项:github.com/dotnet/corefx/issues/1006
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    "MailKit": "~1.6.0"
    

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

    【讨论】:

      【解决方案4】:

      如果您已在 Visual Studio 2017 中设置项目,则此解决方案将起作用:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-01
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        • 2018-11-18
        相关资源
        最近更新 更多