【发布时间】:2021-05-28 15:07:52
【问题描述】:
当尝试使用 sendgrid 发送电子邮件时,它会将表格组合在一起。这就是我希望电子邮件的外观
但它最终看起来像这样
我已经尝试过重新格式化和一切。这是我用来创建电子邮件的代码。在获取 $bodyjson 的输出时,看起来表格已正确拆分。
$StartDates = @(
[PSCustomObject]@{
Type = "CurrentDay"
startDate = [DateTime]::UtcNow.AddDays(-1).ToString('yyyy-MM-dd')
}, [PSCustomObject]@{
Type = "MonthToDate"
startDate = [DateTime]::UtcNow.ToString('yyyy-MM-01')
}
)
$EmailStyle = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$EmailStyle += "TABLE{border: 1px solid black; border-collapse: collapse;}"
$EmailStyle += "TH{border: 1px solid black; background: #D8D8D8; padding: 5px; }"
$EmailStyle += "TD{border: 1px solid black; padding: 5px; }"
$EmailStyle += "</style>"
$Html = ''
$Subscriptions = Get-AzSubscription | Select-Object -First 1
Foreach ($Subscription in $Subscriptions)
{
Set-AzContext -Subscription $Subscription.SubscriptionId
Foreach ($Date in $StartDates)
{
$Consumption = Get-AzConsumptionUsageDetail -StartDate $Date.startDate -EndDate ([DateTime]::UtcNow.ToString('yyyy-MM-dd'))
$Costs = $Consumption | Select-Object InstanceId, InstanceName, InstanceLocation, PretaxCost, Product, SubscriptionName
$Costs | % {Add-Member -InputObject $_ -NotePropertyName ResourceGroup -NotePropertyValue ($_.InstanceId.split('/')[4]).ToLower()}
$Groups = $Costs | Group-Object InstanceName
#Write-Output $Groups
$GroupsCost = $Groups | % {[PSCustomObject]@{ResourceGroup=$_.Group[0].ResourceGroup; Item=$_.Name; Description=$_.Group[0].Product; Location=$_.Group[0].InstanceLocation; Sum=($_.Group | Measure -Property 'PretaxCost' -Sum).Sum}}
$TotalCost = ($GroupsCost | Measure -Property 'Sum' -Sum).Sum
$RoundedTotal = [math]::Round($TotalCost, 2)
$TopFive = $GroupsCost | Sort-Object Sum -Descending | Select-Object -First 5
$TopFive | % {Add-Member -InputObject $_ -NotePropertyName NewSum -NotePropertyValue ([Math]::Round($_.Sum,2))}
$TopFive = $TopFive | Select-Object ResourceGroup, Item, Description, Location, NewSum
$TopFive = $TopFive | Add-Member -MemberType AliasProperty -Name Sum -Value NewSum -PassThru | Select-Object ResourceGroup, Item, Description, Location, Sum
Write-Output "$($Subscription.Name) with Total Cost of $($RoundedTotal) for $($Date.Type)"
Write-Output "Top 5 Spenders:"
Write-Output $TopFive
$Html += "<div>$($Subscription.Name) with Total Cost of $($RoundedTotal) for $($Date.Type)</div>"
$Html += "<br></br>"
$Html += "Top 5 Spenders:"
$Html += "<div>$($TopFive | ConvertTo-Html -Head $EmailStyle)</div>"
$Html += "<br></br>"
}
}
##Send Email##
$Html += "<br></br>"
$Html += "For troubleshooting this email, the automation for this can be found at this location: "
$Html += "<a href="+ $($AutomationLink) +">Azure Portal: Expiring Security Items</a>"
$SENDGRID_API_KEY = Get-AzKeyVaultSecret -VaultName <vaultname> -Name <keyname> -AsPlainText
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer " + $SENDGRID_API_KEY)
$headers.Add("Content-Type", "application/json")
$body = @{
personalizations = @(
@{
to = @(
@{
email = $EmailTo
}
)
}
)
from = @{
email = $EmailFrom
}
subject = $Subject
content = @(
@{
type = "text/html"
value = $Html
}
)
}
$bodyJson = $body | ConvertTo-Json -Depth 4
$response = Invoke-RestMethod -Uri https://api.sendgrid.com/v3/mail/send -Method Post -Headers $headers -UseBasicParsing -Body $bodyJson
【问题讨论】:
-
我们还没有收到您的来信.. 我的回答解决了您的问题吗?如果是这样,请通过单击左侧的大复选标记图标
✓来考虑accepting。这将帮助其他有类似问题的人更轻松地找到它。
标签: html json powershell sendgrid