Azure自动化Runbook如何添加邮件端点以发送执行结果?
解答:Azure中邮件端点配置及Runbook结果发送方案
一、Azure中邮件端点的添加位置
Azure里实现邮件发送端点主要有两种常用方案:
1. Azure逻辑应用(Logic Apps)
这是最便捷的方式,自带成熟的邮件连接器:
- 登录Azure门户,搜索“逻辑应用”,创建消费型或标准型逻辑应用(按需选择)。
- 在逻辑应用设计器中,添加**“当收到HTTP请求时”**触发器,生成可被Runbook调用的HTTP端点。
- 接着添加邮件发送动作:选择Office 365 Outlook、SendGrid或SMTP等连接器,配置收件人、主题等参数,正文可设置为动态内容,用于接收Runbook传来的VM列表数据。
- 保存后复制触发器生成的HTTP URL,这就是你的邮件发送端点。
2. Azure通信服务(Azure Communication Services)
适合需要高度自定义邮件服务的场景:
- 在Azure门户创建“通信服务”资源。
- 进入资源的“电子邮件”选项卡,配置并验证邮件域名,创建电子邮件发送端点。
- 可通过REST API或SDK调用该端点发送邮件,Runbook中用PowerShell/Python代码对接即可。
二、通过邮件端点发送Runbook执行结果
完全可以实现,以下是两种方案的集成步骤:
方案1:逻辑应用+PowerShell Runbook示例
- 修改现有Runbook,在获取VM列表的代码后添加调用逻辑应用端点的代码:
# 获取运行中VM列表 $runningVMs = Get-AzVM -Status | Where-Object { $_.PowerState -eq 'VM running' } | Select-Object Name, ResourceGroupName, Location # 转换为HTML格式方便邮件展示 $htmlBody = "<h3>运行中的VM列表</h3><table><tr><th>VM名称</th><th>资源组</th><th>区域</th></tr>" foreach ($vm in $runningVMs) { $htmlBody += "<tr><td>$($vm.Name)</td><td>$($vm.ResourceGroupName)</td><td>$($vm.Location)</td></tr>" } $htmlBody += "</table>" # 调用逻辑应用端点发送邮件 $logicAppEndpoint = "https://prod-xx.westus.logic.azure.com:443/workflows/xxxx/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=xxxx" $requestBody = @{ Subject = "Azure运行中VM列表报告" Body = $htmlBody To = "your-email@example.com" } | ConvertTo-Json Invoke-RestMethod -Uri $logicAppEndpoint -Method Post -Body $requestBody -ContentType "application/json"
- 在逻辑应用的邮件发送动作中,将参数绑定为HTTP请求传入的动态内容(比如
Subject、Body),即可自动发送Runbook生成的VM列表。
方案2:Azure通信服务+PowerShell Runbook示例
如果用ACS,可直接调用其邮件API:
# ACS配置参数 $acsEndpoint = "https://<你的ACS资源名>.communication.azure.com/emails:send?api-version=2023-03-31" $accessKey = "<你的ACS访问密钥>" $fromAddr = "sender@已验证的域名.com" $toAddr = "recipient@example.com" # 构建邮件内容 $emailContent = @{ senderAddress = $fromAddr content = @{ subject = "Azure运行中VM列表报告" html = $htmlBody # 前面生成的VM列表HTML内容 } recipients = @{ to = @( @{ address = $toAddr displayName = "收件人名称" } ) } } | ConvertTo-Json # 生成ACS API所需的HMAC签名(需按Azure文档规则生成,或使用SDK简化) $headers = @{ "Authorization" = "HMAC-SHA256 SignedHeaders=date;host;x-ms-content-sha256&Signature=<生成的签名>" "x-ms-content-sha256" = (Get-FileHash -InputStream ([System.IO.MemoryStream]::new([System.Text.Encoding]::UTF8.GetBytes($emailContent))) -Algorithm SHA256).Hash.ToLower() "Date" = (Get-Date -Format r) "Host" = "<你的ACS资源名>.communication.azure.com" } # 调用API发送邮件 Invoke-RestMethod -Uri $acsEndpoint -Method Post -Body $emailContent -Headers $headers -ContentType "application/json"
内容的提问来源于stack exchange,提问作者Dexter
相关产品推荐
相关产品推荐

