2017-02-24 102 views
11

我想創建類似如下線圖:線圖生成的圖像將通過電子郵件發送

Line Chart

我只是不知道是否有可用的ASP.NET MVC生成可用的框架或API因爲我的目標是通過電子郵件發送這個圖表。我在想,如果我可以放一些像<img src="http://imageapi.com?date1=20170101&date=20170130" />那麼API將處理圖表圖像生成。

上進行搜索,我發現了很多圖表框架的使用JavaScript,但我懷疑它會在不同的電子郵件客戶端正常工作。

非常感謝!

+2

你嘗試HTML電子郵件? – VMAtm

+0

你是什麼意思html電子郵件? – Sherwin

+1

SQL Server Reporting Services可以根據需要創建這種報告或通過訂閱通過電子郵件發送 –

回答

6

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互動式圖表被積極維護,我們在2012年正式棄用靜態Google圖表圖表。這使我們有權在不通知的情況下關閉它,儘管我們沒有計劃這樣做。

+0

注意它可能添加一個右軸爲你的百分比也 –

+0

這是很酷的不知道谷歌有這樣的事情。這將爲我節省很多時間在開發中。的xD – Sherwin

1

你是什麼設計? 您的圖表必須在網頁中生成,然後它必須生成html。 如果沒有生成html並且只生成圖像,那麼這是最好的。 現在你可以在發送相同的內容。

如果沒有再次生成的圖像,你在這裏2選項 我)一起發送完整的HTML電子郵件正文關切JS/CSS ii)您可以將這些HTML轉換成圖像使用(比如c#)然後發送郵件。

請註明您的完整場景。

1
  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("[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"); 
    } 
    
+0

感謝您的支持。 :) – Sherwin