Линейная диаграмма сгенерированного изображения, которое будет отправлено по электронной почте

Я хочу создать линейную диаграмму, подобную ниже:

Диаграмма строк

Мне просто интересно, есть ли доступная инфраструктура или API, доступные в ASP.NET MVC, которая генерирует графические изображения, так как моя цель - отправить это по электронной почте. Я думаю, если я могу просто положить что-то вроде <img src="http://imageapi.com?date1=20170101&date=20170130" />, тогда api будет обрабатывать генерацию изображения диаграммы.

При поиске я нашел много фреймворков диаграмм, используя javascript, но я сомневаюсь, что он будет правильно работать на разных почтовых клиентах.

Спасибо большое!

Ответ 1

Google Image Charts будет делать это. Передайте данные и параметры отображения через URL-адрес, и он вернет изображение.

например.

<img src="https://chart.googleapis.com/chart?cht=lc&chd=t:30,10,45,38,25|10,20,10,20,10&chls=2.0,0.0,0.0&chs=200x125&chg=0,20,3,3,10,20&chxt=x,y&chxl=0:|Week1|Week2|Week3|Week4|Week5|1:|0|20|40|60|80|100&chs=800x300&chm=o,ff9900,0,-1,10.0|d,ff0000,1,-1,10.0&chco=FFC6A5,DEBDDE&chdl=Click|GRU" />

выводит эту диаграмму:

chart?cht=lc&chd=t:30,10,45,38,25|10,20,10,20,10&chls=2.0,0.0,0.0&chs=200x125&chg=0,20,3,3,10,20&chxt=x,y&chxl=0:|Week1|Week2|Week3|Week4|Week5|1:|0|20|40|60|80|100&chs=800x300&chm=o,ff9900,0,-1,10.0|d,ff0000,1,-1,10.0&chco=FFC6A5,DEBDDE&chdl=Click|GRU

Они предоставляют игровое поле для тестирования: https://developers.google.com/chart/image/docs/chart_playground

Обратите внимание, что Google не поддерживает его дальше, но не планирует удалять эту функциональность:

В то время как динамические и интерактивные диаграммы Google активно поддерживаются, мы официально отказываемся от статических графических карт Google в 2012 году. Это дает нам право отключить его без предупреждения, хотя мы не планируем это делать.

Ответ 2

Каков ваш дизайн? Ваша диаграмма должна быть сгенерирована на веб-странице, тогда она должна быть сгенерирована html. Если html не генерируется и создается только изображение, тогда это лучше всего. теперь вы можете отправить один и тот же контент.

Если изображение не сгенерировано, снова у вас есть 2 варианта i) Отправить полный html в тело электронной почты вместе с проблемой js/css ii) вы можете конвертировать эти html в изображение, используя (скажем С#), а затем отправлять почту.

Пожалуйста, укажите ваш полный сценарий.

Ответ 3

  • Существуют различные типы API диаграмм, доступные на рынке, как с открытым исходным кодом, так и с лицензией, вы можете использовать любой, чтобы создать диаграмму/диаграмму на странице, и вы можете отправить эту страницу в виде вложения электронной почты, используя следующий код.

      [HttpPost]
    public ActionResult SendWebPageAsAttachment()
    {
        var subject = Request.Form["subject"]; // You can provide subject from page or code
        var mailContent = Request.Form["bodyInnerHTML"]; // get the body inner HTML by form name
    
        var Body = "<div style='background-color:white;'>" +  Request.Form["mailContent"] + "</div>"; // Email Body
        var attachmentName = DateTime.Now.ToString("yyyy/MM/dd").Replace("/", "-") + "_" + 
            DateTime.Now.ToLongTimeString().Replace(" ", "_") + ".html"; // Attachment Name
    
        var baseUrl = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + 
            HttpContext.Request.ApplicationPath.TrimEnd('/') + '/'; // Base URL
        string src = @"src=""";
    
        mailContent = mailContent.Replace(src, src + baseUrl.Remove(baseUrl.Length - 1));
        mailContent = "<html><head><link href='" + baseUrl + "Themes/styles.css' rel='stylesheet' type='text/css' /><link href='" + 
            baseUrl + "Themes/style.css' rel='stylesheet' type='text/css' /></head><body>" + WebUtility.HtmlDecode(mailContent) + 
            "</body></html>";
        try
        {
            SmtpClient smtpClient = new SmtpClient("mail.MyWebsiteDomainName.com", 25);
            smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "myIDPassword");
            smtpClient.UseDefaultCredentials = true;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtpClient.EnableSsl = true;
            MailMessage mail = new MailMessage();
    
            //Setting From , To and CC
            mail.From = new MailAddress("[email protected]", "MyWeb Site");
            mail.To.Add(new MailAddress("[email protected]"));
            mail.CC.Add(new MailAddress("[email protected]"));
    
            mail.IsBodyHtml = true;
            mail.Subject = subject;
            mail.Body = Body;
    
            var mailDataBytes = ASCIIEncoding.Default.GetBytes(mailContent);
            var mailStream = new MemoryStream(mailDataBytes);
            mail.Attachments.Add(new Attachment(mailStream, attachmentName));
            smtpClient.Send(mail);  
        }
        catch (Exception ex)
        {
            //catch
        }
        ViewBag.IsHttpPost = true;
        return View("SendWebPageAsAttachment");
    }