使用Microsoft Graph API发送HTML格式邮件异常的问题求助
解决Microsoft Graph API发送HTML邮件格式异常问题
问题分析
你遇到的格式异常核心原因是手动拼接JSON字符串时未正确转义HTML内容中的特殊字符,导致Graph API接收到的JSON格式不合法,解析后邮件结构错乱。之前用Send-MailMessage正常是因为该cmdlet会自动处理HTML内容的转义和格式补全,而Graph API需要严格符合JSON规范的请求体。
解决方案
放弃手动拼接JSON的方式,改用PowerShell对象构建邮件内容,再通过ConvertTo-Json生成标准JSON,自动处理特殊字符转义。同时确保HTML内容结构完整。
修改后的代码示例
# 构建邮件对象 $mailMessage = [PSCustomObject]@{ message = [PSCustomObject]@{ subject = $subData body = [PSCustomObject]@{ contentType = 'html' content = $bodyData } toRecipients = @( [PSCustomObject]@{ emailAddress = [PSCustomObject]@{ address = $MailtTo } } ) } } # 转换为JSON(Depth参数确保HTML内容完整序列化,可根据实际嵌套深度调整) $Body = $mailMessage | ConvertTo-Json -Depth 10 # 发送邮件 $sendmail = Invoke-RestMethod -Headers $Headers -URI "https://graph.microsoft.com/v1.0/users/$MailFrom/sendMail" -Body $Body -Method POST -ContentType "application/json"
额外检查项
- 确保
$bodyData中的HTML是完整结构,包含<html>、<body>标签,示例结构如下:<html> <body> <h1>邮件标题</h1> <p>正文段落内容</p> <ul> <li>列表项1</li> <li>列表项2</li> </ul> </body> </html> - 如果
$bodyData从文件读取,直接使用Get-Content -Path "你的HTML文件路径" -Raw获取原始内容即可,避免手动修改导致格式破坏。
内容的提问来源于stack exchange,提问作者avinash
相关产品推荐
相关产品推荐

