正文为 html 的 Powershell 电子邮件发件人 (htmlbody.Replace)
Powershell email sender with html body (htmlbody.Replace)
我目前是一名 C# dotnet 自动化工程师。我的测试结果输出之一是通过电子邮件。我的测试结果输出通过 powershell。一般来说,我对电子邮件模板和 HTML 还很陌生。
这是一个简单的 HTML 主体,其中包含我用 $EmailBody= $EmailBody.Replace("PassedTests",$Passed)
函数等
替换的变量
整个前提:我的脚本用我在测试 运行 后从 .trx 文件中提取的数据替换了 Total tests/Passed/Failed/Skipped。
我的提取码:
$PassedTests = $testResultsXml.TestRun.ResultSummary.Counters.Passed
$FailedTests = $testResultsXml.TestRun.ResultSummary.Counters.Failed
$SkippedTests = $testResultsXml.TestRun.ResultSummary.Counters.Skipped
$OnlyFailed = $testResultsXml.TestRun.Results.UnitTestResult | Where-Object { $_.outcome -eq "Failed" }
$FailedTestsName = $OnlyFailed.TestName
我有“错误列表”table(下图),如果 HTML 主体
中有任何失败的测试,它会显示测试名称
@</td>
</tr>
<!--end img-->
<tr>
<td height="15"></td>
</tr>
<!--title-->
<tr align="center">
<td align="center" style="font-family:
'Open Sans', Arial, sans-serif; font-size:16px;color:#3b3b3b;font-weight: bold;">**ERROR LIST**</td>
</tr>
<!--end title-->
<tr>
<td height="10"></td>
</tr>
<!--content-->
<tr align="center">
<td align="center" style="font-family: 'Open Sans', Arial, sans-serif; font-size:12px;color:#7f8c8d;line-height: 24px;">NoErrors</td>
</tr>
<!--end content-->
</table>
</td>
</tr>
<tr>
<td height="30"></td>
</tr>
</table>
现在的主要问题是:是否有可能只显示“错误列表”table 仅当 有任何失败的测试时?如果没有失败的测试,那么 table 根本不显示会很好。
任何形式的帮助将不胜感激。谢谢!
$EmailBody= $EmailBody.Replace("PassedTests",$Passed)
$EmailBody= $EmailBody.Replace("FailedTests",$Failed)
$EmailBody= $EmailBody.Replace("SkippedTests",$Skipped)
$EmailBody= $EmailBody.Replace("ErrorList",$FailedTestsName)
$Emailattachment = "\TestResults.trx"
你走的路很好。
你只需要扩展你正在做的事情。
- 删除电子邮件中可能存在或不存在的内容(“错误列表”部分,因为如果没有错误,它就不会存在)
- 将您删除的部分放入其自己的变量中
- 在主 html 模板中添加一个占位符(就像您已经做的那样,这样我们就可以在 html 模板中进行替换。
从那里开始,逻辑是:
- 如果有 0 个错误,您将主模板中的占位符替换为空字符串(您不希望该占位符出现在最终电子邮件中)
- 如果有 1 个或多个错误,您可以构建一个包含要追加的部分的新变量,而不是用您的错误列表替换,然后用错误内容替换它的循环,最后替换占位符通过该部分(包含错误循环)
看起来像这样。
$EmailBody = @'
</td>
</tr>
<!--end img-->
<tr>
<td height="15"></td>
</tr>
**ErrorsTable**
'@
$ErrorListBody = @'
<!--title-->
<tr align="center">
<td align="center" style="font-family:
'Open Sans', Arial, sans-serif; font-size:16px;color:#3b3b3b;font-weight: bold;">**ERROR LIST**</td>
</tr>
<!--end title-->
<tr>
<td height="10"></td>
</tr>
<!--content-->
<tr align="center">
<td align="center" style="font-family: 'Open Sans', Arial, sans-serif; font-size:12px;color:#7f8c8d;line-height: 24px;">NoErrors</td>
</tr>
<!--end content-->
</table>
</td>
</tr>
<tr>
<td height="30"></td>
</tr>
</table>
'@
if ($FailedTests.Count -gt 0) {
# inserting errors to the `$ErrorListBody` html segment
$ErrorsHtml = $ErrorListBody.Replace("ErrorList", $FailedTestsName)
# inserting the html segment into the main email
$EmailBody = $EmailBody.Replace("**ErrorsTable**", $ErrorsHtml)
} else {
# Removing the placeholder from the main template.
$EmailBody = $EmailBody.Replace("**ErrorsTable**", '')
}
我目前是一名 C# dotnet 自动化工程师。我的测试结果输出之一是通过电子邮件。我的测试结果输出通过 powershell。一般来说,我对电子邮件模板和 HTML 还很陌生。
这是一个简单的 HTML 主体,其中包含我用 $EmailBody= $EmailBody.Replace("PassedTests",$Passed)
函数等
整个前提:我的脚本用我在测试 运行 后从 .trx 文件中提取的数据替换了 Total tests/Passed/Failed/Skipped。 我的提取码:
$PassedTests = $testResultsXml.TestRun.ResultSummary.Counters.Passed
$FailedTests = $testResultsXml.TestRun.ResultSummary.Counters.Failed
$SkippedTests = $testResultsXml.TestRun.ResultSummary.Counters.Skipped
$OnlyFailed = $testResultsXml.TestRun.Results.UnitTestResult | Where-Object { $_.outcome -eq "Failed" }
$FailedTestsName = $OnlyFailed.TestName
我有“错误列表”table(下图),如果 HTML 主体
中有任何失败的测试,它会显示测试名称@</td>
</tr>
<!--end img-->
<tr>
<td height="15"></td>
</tr>
<!--title-->
<tr align="center">
<td align="center" style="font-family:
'Open Sans', Arial, sans-serif; font-size:16px;color:#3b3b3b;font-weight: bold;">**ERROR LIST**</td>
</tr>
<!--end title-->
<tr>
<td height="10"></td>
</tr>
<!--content-->
<tr align="center">
<td align="center" style="font-family: 'Open Sans', Arial, sans-serif; font-size:12px;color:#7f8c8d;line-height: 24px;">NoErrors</td>
</tr>
<!--end content-->
</table>
</td>
</tr>
<tr>
<td height="30"></td>
</tr>
</table>
现在的主要问题是:是否有可能只显示“错误列表”table 仅当 有任何失败的测试时?如果没有失败的测试,那么 table 根本不显示会很好。 任何形式的帮助将不胜感激。谢谢!
$EmailBody= $EmailBody.Replace("PassedTests",$Passed)
$EmailBody= $EmailBody.Replace("FailedTests",$Failed)
$EmailBody= $EmailBody.Replace("SkippedTests",$Skipped)
$EmailBody= $EmailBody.Replace("ErrorList",$FailedTestsName)
$Emailattachment = "\TestResults.trx"
你走的路很好。 你只需要扩展你正在做的事情。
- 删除电子邮件中可能存在或不存在的内容(“错误列表”部分,因为如果没有错误,它就不会存在)
- 将您删除的部分放入其自己的变量中
- 在主 html 模板中添加一个占位符(就像您已经做的那样,这样我们就可以在 html 模板中进行替换。
从那里开始,逻辑是:
- 如果有 0 个错误,您将主模板中的占位符替换为空字符串(您不希望该占位符出现在最终电子邮件中)
- 如果有 1 个或多个错误,您可以构建一个包含要追加的部分的新变量,而不是用您的错误列表替换,然后用错误内容替换它的循环,最后替换占位符通过该部分(包含错误循环)
看起来像这样。
$EmailBody = @'
</td>
</tr>
<!--end img-->
<tr>
<td height="15"></td>
</tr>
**ErrorsTable**
'@
$ErrorListBody = @'
<!--title-->
<tr align="center">
<td align="center" style="font-family:
'Open Sans', Arial, sans-serif; font-size:16px;color:#3b3b3b;font-weight: bold;">**ERROR LIST**</td>
</tr>
<!--end title-->
<tr>
<td height="10"></td>
</tr>
<!--content-->
<tr align="center">
<td align="center" style="font-family: 'Open Sans', Arial, sans-serif; font-size:12px;color:#7f8c8d;line-height: 24px;">NoErrors</td>
</tr>
<!--end content-->
</table>
</td>
</tr>
<tr>
<td height="30"></td>
</tr>
</table>
'@
if ($FailedTests.Count -gt 0) {
# inserting errors to the `$ErrorListBody` html segment
$ErrorsHtml = $ErrorListBody.Replace("ErrorList", $FailedTestsName)
# inserting the html segment into the main email
$EmailBody = $EmailBody.Replace("**ErrorsTable**", $ErrorsHtml)
} else {
# Removing the placeholder from the main template.
$EmailBody = $EmailBody.Replace("**ErrorsTable**", '')
}