簡體   English   中英

如何使用Powershell將圖表作為電子郵件正文發送

[英]How to send a chart as an email body using powershell

我有以下代碼。 它用於比較兩個日期的數據,然后將其保存在3D圖表中。

     [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")
$scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition

# chart object
 $chart1 = New-object System.Windows.Forms.DataVisualization.Charting.Chart
 $chart1.Width = 1300
 $chart1.Height = 600
 $chart1.BackColor = [System.Drawing.Color]::White

# title 
 [void]$chart1.Titles.Add("Order Rate")
 $chart1.Titles[0].Font = "Arial,13pt"
 $chart1.Titles[0].Alignment = "topLeft"

# chart area 

$chartarea3D = New-Object  System.Windows.Forms.DataVisualization.Charting.ChartArea3DStyle
# $chartarea.Name = "ChartArea1"
$chartarea3D.Enable3D = $true
$ChartArea = $chart1.ChartAreas.Add('ChartArea');
$ChartArea.Area3DStyle = $chartarea3D
$chartarea.AxisY.Title = "Orders"
$chartarea.AxisX.Title = "Hour"
$chartarea.AxisY.Interval = 200
$chartarea.AxisX.Interval = 1

# legend 
$legend = New-Object system.Windows.Forms.DataVisualization.Charting.Legend
$legend.name = "Legend1"
$chart1.Legends.Add($legend)

# data source

#region Invoke sql
function Invoke-Sqlcmd2 
<some code>

 #endregion 
 $datasource = Invoke-Sqlcmd2 -ServerInstance yyyyyy -Database     internetordering -Query "SELECT  DATEPART(hh,createdon) AS hour, Count(*)Orders from dbo.OrderHeader (nolock ) 
    where isimported = 1 and createdon between '01/27/2015 0:00:00' and '01/27/2015 23:59:59'
    group by DATEPART(hh,createdon)"

   $datasource2 = Invoke-Sqlcmd2 -ServerInstance zzzzzz -Database internetordering -Query "SELECT  DATEPART(hh,createdon) AS hour, Count(*)Orders from InternetOrdering.dbo.OrderHeader (nolock ) 
    where isimported = 1 and createdon between '01/28/2015 0:00:00' and '01/28/2015 23:59:59'
    group by DATEPART(hh,createdon)"


# data series
[void]$chart1.Series.Add("OrdersLastMonthEOM")
#$chart1.Series["OrdersLastMonthEOM"].ChartType = "Column"
$chart1.Series["OrdersLastMonthEOM"].ChartType = "Line"
$chart1.Series["OrdersLastMonthEOM"].IsVisibleInLegend = $true
$chart1.Series["OrdersLastMonthEOM"].BorderWidth  = 3
#$chart1.Series["OrdersLastMonthEOM"].chartarea = "ChartArea1"
$chart1.Series["OrdersLastMonthEOM"].Legend = "Legend1"
$chart1.Series["OrdersLastMonthEOM"].color = "#62B5CC"
$datasource | ForEach-Object  {$chart1.Series["OrdersLastMonthEOM"].Points.addxy( $_.Hour , $_.Orders) }

# data series
[void]$chart1.Series.Add("OrdersThisMonthEOM")
#$chart1.Series["OrdersThisMonthEOM"].ChartType = "Column"
$chart1.Series["OrdersThisMonthEOM"].ChartType = "Line"
$chart1.Series["OrdersThisMonthEOM"].IsVisibleInLegend = $true
$chart1.Series["OrdersThisMonthEOM"].BorderWidth  = 3
#$chart1.Series["OrdersThisMonthEOM"].chartarea = "ChartArea1"
$chart1.Series["OrdersThisMonthEOM"].Legend = "Legend1"
$chart1.Series["OrdersThisMonthEOM"].color = "#E3B64C"
$datasource2 | ForEach-Object {$chart1.Series["OrdersThisMonthEOM"].Points.addxy( $_.Hour , $_.Orders) }

# save chart
$chart1.SaveImage("$scriptpath\SplineArea2.png","png")

這將在ISplineArea.png上創建一個很酷的3D折線圖。 我需要一種在電子郵件正文中發送此圖的方法。 任何人都可以幫忙。

從這里

簡而言之,您必須以HTML格式發送消息,附加圖片,為HTML中顯示的每張圖片設置ContentID(cid),並在img標簽(如<img src="cid:content-id-you-assigned" > )中進行尋址

$EmailFrom = "NoReply@siteone.ok"
$EmailSubject = "Email including images in HTML"
$smtpServer = "mx1.siteone.ok"
$SendTo = "mailto@sitetwo.ok"

# Working with attachment and HTML code 
$Image = "C:\scripts\MailScript\TestImage.png"
$att1 = new-object Net.Mail.Attachment($Image)
$att1.ContentType.MediaType = "image/png"
$att1.ContentId = "MyAttachment"
$mailmessage = New-Object system.net.mail.mailmessage 
$mailmessage.Attachments.Add($att1)
$body = "<p style='font-family: Calibri, sans-serif'>
     <img src='cid:MyAttachment' /><br />
     This is a demonstration mail. 
     </p>"

$mailmessage.from = $emailfrom
$mailmessage.To.add($sendto)
$mailmessage.Subject = $emailsubject
$mailmessage.Body = $body
$mailmessage.IsBodyHTML = $true
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
$SMTPClient.Send($mailmessage)
$att1.dispose()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM