Отправка почты с помощью ASP.Net vNext
В старых версиях ASP.Net и .Net отправка почты осуществлялась через классы System.Net.Mail
, которые находились в System.dll
. Теперь с KRE vNext не имеет System.Net.Mail
как отдельный пакет.
Ссылка на структуру "net453"
в project.json
"frameworks": {
"aspnet50": { },
"aspnetcore50": { },
"net453": {} // <<< throws compilation errors
},
заставляет все ад сломаться с ошибками вроде:
Ошибка .NET Framework 4.5.3 CS0234: Тип или имя пространства имен "AspNet" не существует в пространстве имен "Microsoft" (вам не хватает ссылки на сборку?)
Он фактически жалуется на все зависимости vNext, которые являются частью пакетов kpm.
Итак, кто-нибудь выяснил способ отправки писем с помощью ASP.Net vNext?
Примечание
Даже если System
появляется в разделе Ссылки, и хотя Intellisense показывает, что System.Net.Mail
доступен для использования, код не компилируется. Например, простой оператор, подобный этому, хотя и действителен,
using System.Net.Mail;
var m = new MailMessage();
выдаст ошибку компиляции, например:
Ошибка ASP.NET Core 5.0 CS0234: Тип или имя пространства имен "Сеть" не существует в пространстве имен "Система" (вам не хватает ссылки на сборку?)
Ошибка ASP.NET Core 5.0 CS0246: имя типа или пространства имен MailMessage не может быть найдено (вам не хватает директивы using или ссылки на сборку?)
Обновить
С последней версией Visual Studio 2015 CTP 5 они, похоже, исправили ошибку intellisense. Теперь System.Net
больше не имеет пространства имен Mail
. На стороне примечания, проект vNext, который я создал с предварительным просмотром VS 2015, больше не работает - я получаю ошибку 403.3 на домашней странице! Ах, радость от работы с бета-программным обеспечением!
Ответы
Ответ 1
Чтобы использовать System.Net.Mail
, ваше приложение может ориентироваться только на aspnet50
. Цель aspnetcore50
не имеет такой поддержки (по крайней мере, не сейчас, насколько я знаю).
У вас никогда не должно быть целевого приложения net453
(которое, как упоминалось в комментарии Luca в комментарии, с тех пор переименовано), поскольку приложения ASP.NET 5 не запускаются на этой платформе.
Приложение, нацеленное на aspnet50
, может вообще ссылаться на любой пакет NuGet.NET 4.0+ или GAC.
Итак, в вашем случае удалите цели net453
и aspnetcore50
, а в пределах aspnet50
добавьте ссылку на фреймворк на System.Net.Mail
.
Полная альтернатива - найти другой существующий пакет NuGet, который поддерживает отправку электронной почты как в aspnet50
, так и aspnetcore50
, но я сомневаюсь, что такой пакет существует в это время (хотя, без сомнения, он будет в какой-то момент в будущем).
Ответ 2
Проследить... Команда .NET заявила, что портирование System.Net.Mail будет менее простым и, скорее всего, займет некоторое время. То, что облом с рабочего сайта обычно делает больше, чем небольшая отправка электронной почты.
В то же время кто-то только что выпустил API-адрес электронной почты, совместимый с Core-Clr, который называется MailKit. Вы можете прочитать об этом здесь https://github.com/jstedfast/MailKit/issues/212