Линейная диаграмма сгенерированного изображения, которое будет отправлено по электронной почте
Я хочу создать линейную диаграмму, подобную ниже:
![Диаграмма строк]()
Мне просто интересно, есть ли доступная инфраструктура или 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");
}