2015-03-25 1 views
2

У меня есть веб-сайт, который использует загрузочную и загрузочную тему. Мой веб-сайт также отправляет уведомления электронной почты пользователям веб-сайта, когда они вызывают определенные действия.Прочитайте содержимое CSS из пакета в коде на веб-сайте ASP.NET MVC

Я хочу, чтобы тело электронного письма с уведомлением было отправлено, чтобы быть хорошо отформатированным HTML-контентом с тем же внешним видом и ощущением, что и основной веб-сайт.

Меня всегда учили писать DRY-код и делать вещи максимально возможными, поэтому я хочу включить тот же самый загрузочный CSS-код, который мой веб-сайт использует в качестве встроенного файла в электронном письме, и имеет ссылку на тело HTML что CSS, так что, если я решит изменить тему своего веб-сайта, он автоматически переименует мои уведомления по электронной почте.

Я использую System.Net.Mail.SmtpClient, чтобы отправить электронное письмо и добавить контент с помощью AlternateViews. Я не хочу включать живую ссылку обратно на сайт css, потому что сообщение электронной почты просматривается в автономном режиме, поэтому я хочу вставить css.

Я застрял в том, как читать файл CSS в строку и прикрепить его к письму. В моей BundleConfig, у меня есть это:

bundles.Add(new StyleBundle("~/Content/css").Include(
      "~/Content/bootstrap-sandstone.css", 
      "~/Content/site.css")); 

Так что я пробовал:

var css = File.ReadAllText(HttpContext.Current.Server.MapPath("~/Content/css")); 

Но, как я думал, что может случиться, это бросил исключение FileNotFound.

Что я могу использовать, это позволит мне пройти в ~/Content/css и выйдет ли css?

+0

Вы можете сделать веб-запрос на свой веб-сайт по этому URL-адресу. Но в любом случае, возможно, плохая идея. CSS в письмах сильно отличается от CSS на веб-странице, потому что не все почтовые клиентские программы поддерживают весь спектр CSS. Результат может оказаться нечитаемым адресом электронной почты. – mason

+0

@mason: Ах да ... не думал об этом ... не идеален, но может быть обходным путем, пока я не найду лучший способ. Благодарю. – BG100

ответ

2

Я нашел способ, чтобы захватить содержимое CSS, используя этот код:

var cssBundle = BundleTable.Bundles.GetBundleFor("~/Content/css"); 
var css = cssBundle.GenerateBundleResponse(new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, string.Empty)).Content; 

Однако, как каменщик предсказывал (в комментариях) СМЧ не работает в электронной почте, и это слишком большой, поэтому я собираюсь просто встроить базовый CSS в HTML.

Смежные вопросы