2014-02-10 5 views
0

У меня есть метод, который возвращает список продуктов из базы данных, которые я бы хотел отправить на определенный адрес электронной почты. Метод, который я хотел бы отправить, возвращает список элементов. Существует формула ContactUs, которая отправляет сообщение, но из costumer для хранения владельца, который я рассматриваю для использования в качестве базы. Однако данные, которые я хочу отправить по электронной почте, должны быть отправлены на адрес электронной почты магазина без отправителя.Отправка сообщения электронной почты в MVC

Я хочу, чтобы отправить список продуктов, которые возвращаются из этого метода:

public IList<BestsellersReportLine> DailyBestsellersReport() 
{ 
    OrderStatus os; 
    PaymentStatus? ps = null; 
    ShippingStatus ss; 
    int billingCountryId = 0; 
    int recordsToReturn = 999; 
    int orderBy = 1; 
    int groupBy = 1; 

    int? paymentStatusId = null; 
    if (ps.HasValue) 
     paymentStatusId = (int)ps.Value; 

    // Specifies the time range for sold products/day 
    var range = new 
    { 
     startTimeUtc = DateTime.Today.AddDays(-1), 
        endTimeUtc = DateTime.Today.AddSeconds(-1), 
        CreatedOnUtc = DateTime.Today.AddDays(-1), 
    }; 

    var query1 = from opv in _opvRepository.Table 
     join o in _orderRepository.Table on opv.OrderId equals o.Id 
     join pv in _productVariantRepository.Table on opv.ProductVariantId equals pv.Id 
     join p in _productRepository.Table on pv.ProductId equals p.Id 
     where (o.CreatedOnUtc >= range.startTimeUtc && o.CreatedOnUtc <= range.endTimeUtc) && 
     (!paymentStatusId.HasValue || paymentStatusId == o.PaymentStatusId) 
     select opv; 

    var query2 = groupBy == 1 ? 
     //group by product variants 
     from opv in query1 
     group opv by opv.ProductVariantId into g 
     select new 
     { 
      EntityId = g.Key, 
        TotalAmount = g.Sum(x => x.PriceExclTax), 
        TotalQuantity = g.Sum(x => x.Quantity), 
     } 
    : 
     //group by products 
     from opv in query1 
     group opv by opv.ProductVariant.ProductId into g 
     select new 
     { 
      EntityId = g.Key, 
        TotalAmount = g.Sum(x => x.PriceExclTax), 
        TotalQuantity = g.Sum(x => x.Quantity), 
     } 
    ; 

    switch (orderBy) 
    { 
     case 1: 
      { 
       query2 = query2.OrderByDescending(x => x.TotalQuantity); 
      } 
      break; 
     case 2: 
      { 
       query2 = query2.OrderByDescending(x => x.TotalAmount); 
      } 
      break; 
     default: 
      throw new ArgumentException("Wrong orderBy parameter", "orderBy"); 
    } 

    if (recordsToReturn != 0 && recordsToReturn != int.MaxValue) 
     query2 = query2.Take(recordsToReturn); 

    var result = query2.ToList().Select(x => 
      { 
      var reportLine = new BestsellersReportLine() 
      { 
      EntityId = x.EntityId, 
      TotalAmount = x.TotalAmount, 
      TotalQuantity = x.TotalQuantity 
      }; 
      return reportLine; 


      }).ToList(); 

    //return result; 
    return result.OrderBy(opv => opv.TotalQuantity).ToList(); 
} 

В электронном письме в этот метод:

[HttpPost, ActionName("ContactUs")] 
[CaptchaValidator] 
public ActionResult ContactUsSend(ContactUsModel model, bool captchaValid) 
{ 
    //validate CAPTCHA 
    if (_captchaSettings.Enabled && _captchaSettings.ShowOnContactUsPage && !captchaValid) 
    { 
     ModelState.AddModelError("", _localizationService.GetResource("Common.WrongCaptcha")); 
    } 

    if (ModelState.IsValid) 
    { 
     string email = model.Email.Trim(); 
     string fullName = model.FullName; 
     string subject = string.Format(_localizationService.GetResource("ContactUs.EmailSubject"), _storeInformationSettings.StoreName); 

     var emailAccount = _emailAccountService.GetEmailAccountById(_emailAccountSettings.DefaultEmailAccountId); 
     if (emailAccount == null) 
      emailAccount = _emailAccountService.GetAllEmailAccounts().FirstOrDefault(); 

     string from = null; 
     string fromName = null; 
     string body = Core.Html.HtmlHelper.FormatText(model.Enquiry, false, true, false, false, false, false); 
     //required for some SMTP servers 
     if (_commonSettings.UseSystemEmailForContactUsForm) 
     { 
      from = emailAccount.Email; 
      fromName = emailAccount.DisplayName; 
      body = string.Format("<strong>From</strong>: {0} - {1}<br /><br />{2}", 
        Server.HtmlEncode(fullName), 
        Server.HtmlEncode(email), body); 
     } 
     else 
     { 
      from = email; 
      fromName = fullName; 
     } 
     _queuedEmailService.InsertQueuedEmail(new QueuedEmail() 
     { 
      From = from, 
      FromName = fromName, 
      To = emailAccount.Email, 
      ToName = emailAccount.DisplayName, 
      Priority = 5, 
      Subject = subject, 
      Body = body, 
      CreatedOnUtc = DateTime.UtcNow, 
      EmailAccountId = emailAccount.Id 
     }); 

     model.SuccessfullySent = true; 
     model.Result = _localizationService.GetResource("ContactUs.YourEnquiryHasBeenSent"); 

     //activity log 
     _customerActivityService.InsertActivity("PublicStore.ContactUs", _localizationService.GetResource("ActivityLog.PublicStore.ContactUs")); 

     return View(model); 
    } 

    model.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnContactUsPage; 
    return View(model); 
} 

Примечание: ContactUs -метод метод по умолчанию в NopCommerce, iv'e попытался изменить несколько вещей, но не получал annywhere. Мне просто нужно отправить список продуктов, полученных из базы данных, с помощью метода «DailyBestsellersReport» на адрес электронной почты владельца магазина.

В простой теории я хотел бы сделать что-то вроде этого:

[HttpPost, ActionName("Bestsellers")] 
[CaptchaValidator] 
public ActionResult SendBestSellersList(BestSellersReportLine model) 
{ 
    DailyBestsellersReport(); 
} 
+0

Iv'e пытался фильтрации метод ContactUsSend и получить некоторые ошибки. Этот метод на самом деле является формальным на веб-странице, где клиент должен заполнить свой адрес электронной почты, имя и запрос по электронной почте. Я только не могу отправить данные из своего метода «MyIListMethod()», чтобы сохранить адрес владельца. – koffe14

+0

Обычно почта содержит тело (HTML или текст по вашему желанию). Вы бы создали тело из своих данных. Альтернатива: Создайте превосходное или другое и прикрепите его. Текущее состояние вопроса не позволяет нам вас, потому что: нет четкого вопроса (такие вопросы, как do do/google и т. Д. Arre нежелательны), и никакая ошибка, которую вы можете показать. Почтовая рассылка скрыта за сервисом, и из того, что вы написали, есть открытые вопросы с точки зрения вашего требования. – Sascha

+2

@ KristofferAndersson. Ваше требование неясно, не может получить то, что вы хотите сделать. –

ответ

3

Хотя это не прямой ответ, если вы ищете простой многоразовый вариант я рекомендую MVC Мейлер, Он доступен как NuGet Пакет: https://www.nuget.org/packages/MvcMailer

А также есть хороший шаг за шагом, что каждый может получить их вокруг головы -

https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide

Другой Учебник:

http://www.hanselman.com/blog/NuGetPackageOfTheWeek2MvcMailerSendsMailsWithASPNETMVCRazorViewsAndScaffolding.aspx

+1

Спасибо, я посмотрю на это =) – koffe14

+0

Помогло ли это вам - если да, примите в качестве ответа – JonE

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