これは答えられたかもしれませんが、私は新しく学びたいので、私はそれを「取得」していないと思います。私は情報のテーブルを含んでいる変数を持っています(SQLクエリから取得しました)。私は変数を画面に出力してテーブルを見ることができますが、HTMLメールをボディに入れようとすると文字化けします。PowerShellの表示表HTML形式の電子メール
# This code sets up the HTML table in a more friendly format
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"
# This code defines the search string in the IssueTrak database tables
$SQLServer = "Blah"
$SQLDBName = "Blah"
$SQLUsername = "Blah"
$SQLPassword = "Blah"
$SQLQuery = "SELECT u.FirstName,u.LastName,u.EMail,COUNT(UserID) as Count
FROM dbo.Issues i with(nolock)
JOIN DBO.Users u with(nolock) on u.UserID = i.NextActionBy
where i.Status='Open'
group by u.FirstName,u.LastName,u.EMail
order by Count(*) desc"
# This code connects to the SQL server and retrieves the data
$SQLConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; uid = $SQLUsername; pwd = $SQLPassword"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
# This code outputs the retrieved data
$DataSet.Tables | Format-Table -Auto
# This code emails a report regarding the results of the retrieved data
$smtpServer = "Blah"
$smtpFrom = "Blah"
$smtpTo = "Blah"
$messageSubject = "IssueTrak Open Issues By Next Action Report"
$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true
$message.Body = "Here is a listing of open issues in IssueTrak, sorted by Next Action.<br><br>"
$message.Body = $message.Body + $html
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)
出力画面上で次のようになります:
35
FirstName LastName EMail Count
--------- -------- ----- -----
John Doe [email protected] 51
Jane Doe [email protected] 20
...しかし、電子メールの本文は、次のようになります。
Here is a listing of open issues in IssueTrak, sorted by Next Action.
Microsoft.PowerShell.Commands.Internal.Format.FormatStartData Microsoft.PowerShell.Commands.Internal.Format.GroupStartData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
ここ
は、コードがあります...等々。私は間違って何をしていますか?
+1と-bodyAsHTMLのsend-mailmessageの使用 –
私はそれを試みましたが、エラーが発生しています。私は完全なコードを共有しました、多分あなたは私が間違っているのを見ることができますか? –
OK、最初に取り除くのは: '$ DataSet.Tables | Format-Table -Auto' これは何もしないためです。 '$ DataSet'を取得し、DataTable、' $ table = $ DataSet.Tables [0] 'を取得する必要があります。 DataTableを作成したら、私の例を使って手動で$ html文字列を作成します。 –