2015-05-18 9 views
11

У меня возникли проблемы с созданием простого посланного почтового отправителя в рамках проекта ASP NET 5.Использование System.Net.Mail в проекте ASP NET MVC 6

Здесь метод:

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 Ядра 5.0, и проект не будет компилироваться.

В моей project.json есть:

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

Я не верю, что 'SmtpClient' в настоящее время портирована на .Net Core. (Вы можете использовать http: //packagesearch.azurewebsites.net /, чтобы найти новые пакеты NuGet, и их нет.) Нужна ли вам .Net Core? –

+1

Нет, вы правы: поскольку он был включен по умолчанию в шаблоны проектов, я думал, что мне это нужно, но он отлично работает без него. Благодаря ! –

+0

См. Https://github.com/dotnet/corefx/issues/1006 –

ответ

5

Я не верю, что SmtpClient в настоящее время портирована на .Net Core. (Вы можете использовать unofficial reverse package lookup найти новые пакеты NuGet, и не один.)

Поскольку вам не нужно .Net Сердечник, вы можете удалить dnxcore50 записи из frameworks в вашем project.json.

11

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

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

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

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

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

+2

Шляпы к Джеффри Стедфасту, но его работа не должна была быть необходимой. Электронная почта - важная часть большинства веб-приложений: подтверждение регистрации, восстановление пароля, уведомления об ответах на форуме, подтверждения заказа и т. Д. Тот факт, что мы находимся в RC без порта почтовых классов, слегка разочаровывает. Если один разработчик может написать MailKit, как команда ярких руководителей Microsoft, работающая на ASP.net, не переносит старый код? Чтобы помешать Linux/OSX стать жизнеспособными альтернативами? Я копаю много новых функций/функций, но это кажется довольно серьезным упущением. – Sam

+4

@ Сэм не заходить в затянутую дискуссию здесь, о переполнении стека, но я думаю, что поговорка: * Как вы едите слона? Один укус за раз. * Конечно, относится к работе, которую делает Microsoft на .NET Core. – ahsteele

+0

См. Отчет .Net Core на GitHub: https://github.com/dotnet/corefx/issues/1006 –

1

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

"MailKit": "~1.6.0" 

См MailKit на GitHub для законченного примера: https://github.com/jstedfast/MailKit

0

Если вы создали свой проект в 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.

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