Использование System.Net.Mail в проекте ASP NET MVC 6

У меня возникли проблемы с созданием простого фиктивного отправителя почты в проекте 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("[email protected]", "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, и проект не будет компилироваться.

В моем проекте.json есть:

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

person Camille Laborde    schedule 18.05.2015    source источник
comment
Я не верю, что SmtpClient переносится на .Net Core. (Вы можете использовать packagesearch.azurewebsites.net, чтобы найти новые пакеты NuGet, а их нет. ) Вам нужен .Net Core?   -  person Matt DeKrey    schedule 18.05.2015
comment
Нет, вы правы: поскольку он был включен по умолчанию в шаблоны проектов, я думал, что он мне нужен, но он отлично работает и без него. Спасибо !   -  person Camille Laborde    schedule 20.05.2015
comment
См. github.com/dotnet/corefx/issues/1006.   -  person Jon Hanna    schedule 04.12.2015


Ответы (4)


Я не верю, что SmtpClient переносится на .Net Core. (Вы можете использовать неофициальный обратный поиск пакетов, чтобы найти новые пакеты NuGet, а их там нет.)

Поскольку вам не нужен .Net Core, вы можете удалить запись dnxcore50 из frameworks в файле project.json.

person Matt DeKrey    schedule 20.05.2015

На сегодняшний день теперь можно отправлять электронную почту на dnxcore50 в дополнение к net451 (и многим другим платформам) с помощью MailKit.

Я использую rc1 ASP.NET 5 и добавил эти зависимости в свой проект.json, чтобы добавить необходимые nugets.

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

Таким образом, отсутствие System.Net.Mail в dnxcore50 больше не является проблемой, библиотека MailKit на самом деле гораздо более функциональна, чем любая из старых вещей System.Net.Mail.

Огромное спасибо Джеффри Стедфасту за его нелегкий труд.

person Joe Audette    schedule 05.12.2015
comment
Снимаю шляпу перед Джеффри Стедфастом, но его работа не должна была быть необходимой. Электронная почта является важной частью большинства веб-приложений: подтверждение регистрации, восстановление пароля, уведомления об ответах на форумах, подтверждения заказов и т. д. Тот факт, что мы находимся в RC без порта почтовых классов, слегка разочаровывает. Если один разработчик может написать MailKit, как может команда ярких умов Microsoft, работающая над ASP.net, не портировать старый код? Чтобы помешать Linux/OSX стать жизнеспособной альтернативой? Я копаю много новых функций/функций, но это кажется довольно серьезным упущением. - person Sam; 05.01.2016
comment
@Sam, чтобы не вдаваться в затяжные дискуссии здесь, в Stack Overflow, но я думаю, что пословица: Как ты ешь слона? По кусочку за раз. безусловно, относится к работе, которую Microsoft выполняет над .NET Core. - person ahsteele; 26.02.2016
comment
См. невыполненную работу .Net Core на GitHub: github.com/dotnet/corefx/issues/1006 - person Richard Nalezynski; 10.10.2016

Для .NET Core обязательно получите MailKit, обновив project.json, чтобы добавить его в качестве зависимости...

"MailKit": "~1.6.0"

Полный пример см. в разделе MailKit на GitHub: https://github.com/jstedfast/MailKit.

person Richard Nalezynski    schedule 10.10.2016

Если вы настроили свой проект в Visual Studio 2017, то это решение будет работать:

  1. Отредактируйте файл .csproj вашего проекта. Щелкните правой кнопкой мыши имя проекта и выберите «Редактировать Project1.csproj» (если имя вашего проекта — Project1). Откроется XML-файл проекта. Измените TargetFramework на net452 и добавьте тег RuntimeIdentifier со значением win7-x86. Так это выглядит так:

    [PropertyGroup] [TargetFramework]net452[/TargetFramework] [RuntimeIdentifier]win7-x86[/RuntimeIdentifier] [/PropertyGroup]

(замените все скобки bij знаками "меньше" и "больше"). Ваш проект будет связан с .NET Framework 4.5.2, и тогда будут доступны все библиотеки, включая пространство имен System.NET.Mail.

Для меня это рабочее решение... :-)

person Erwin Aarnoudse    schedule 31.05.2017