【问题标题】:Line chart generated image that will be sent through email折线图生成的图像将通过电子邮件发送
【发布时间】:2017-07-14 21:35:54
【问题描述】:

我想创建一个类似下图的折线图:

我只是想知道 ASP.NET MVC 中是否有可用的框架或 API 来生成图表图像,因为我的目标是通过电子邮件发送。我在想,如果我可以只输入<img src="http://imageapi.com?date1=20170101&date=20170130" /> 之类的东西,那么 api 将处理图表图像的生成。

在搜索时,我发现了很多使用 javascript 的图表框架,但我怀疑它能否在不同的电子邮件客户端上正常工作。

非常感谢!

【问题讨论】:

  • 你试过html邮件了吗?
  • html 电子邮件是什么意思?
  • SQL Server Reporting Services 可以按需创建此类报告,也可以通过订阅通过电子邮件发送此类报告

标签: javascript c# asp.net sql-server asp.net-mvc


【解决方案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" />

生成此图表:

他们为测试提供了一个游乐场:https://developers.google.com/chart/image/docs/chart_playground

但请注意,Google 不会进一步维护它,但没有计划删除此功能:

虽然动态和交互式 Google Charts 得到积极维护,但我们早在 2012 年就正式弃用了静态 Google Image Charts。这使我们有权在不通知的情况下将其关闭,尽管我们没有计划这样做。

【讨论】:

  • 请注意,也可以为您的百分比添加右轴
  • 这很酷不知道谷歌有这样的东西。这将为我节省大量的开发时间。 xD
  • 很遗憾,Google Image Charts 现在已被弃用。
  • @CyrilN.它早在我发帖之前就被弃用了——在 2012 年。但它仍然有效。至少暂时
【解决方案2】:

你的设计是什么? 您的图表必须在网页中生成,然后必须生成 html。 如果没有生成 html 并且只生成图像,那么这是最好的。 现在您可以发送相同的内容了。

如果没有生成图像,那么这里还有 2 个选项 i) 在电子邮件正文中发送完整的 html 以及关注的 js/css ii)您可以使用(比如 c#)将这些 html 转换为图像,然后发送邮件。

请提及您的完整场景。

【讨论】:

    【解决方案3】:
    1. 市场上有不同类型的图表 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("info@MyWebsiteDomainName.com", "myIDPassword");
              smtpClient.UseDefaultCredentials = true;
              smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
              smtpClient.EnableSsl = true;
              MailMessage mail = new MailMessage();
      
              //Setting From , To and CC
              mail.From = new MailAddress("info@MyWebsiteDomainName", "MyWeb Site");
              mail.To.Add(new MailAddress("info@MyWebsiteDomainName"));
              mail.CC.Add(new MailAddress("MyEmailID@gmail.com"));
      
              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");
      }
      

    【讨论】:

    • 谢谢。 :)
    猜你喜欢
    • 2017-03-30
    • 2018-09-20
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多