求助:如何通过MS Graph API sendMail正确添加多个收件人
正确的MS Graph API sendMail多收件人JSON格式
你的第一个JSON写法格式本身是正确的,问题出在第二个尝试的写法上——JSON对象中不允许重复的键,你把两个emailAddress放在同一个对象里,会导致后一个覆盖前一个,这是无效的。
不管是toRecipients还是ccRecipients,正确的格式都是数组中每个收件人单独作为一个包含emailAddress的对象,示例如下:
$BodyJsonsend = @" { "message": { "subject": "$($Subject)", "body": { "contentType": "HTML", "content": "$($Body)" }, "toRecipients": [ { "emailAddress": { "address": "mail1@domain.com" } }, { "emailAddress": { "address": "mail4@domain.com" } } ], "ccRecipients": [ { "emailAddress": { "address": "mail2@domain.com" } }, { "emailAddress": { "address": "mail3@domain.com" } }, { "emailAddress": { "address": "mail5@domain.com" } } ] }, "saveToSentItems": "true" } "@
关键要点:
toRecipients和ccRecipients都是JSON数组(用[]包裹)- 数组内的每个元素是独立的对象(用
{}包裹),每个对象只包含一个emailAddress节点 - 多个收件人就往数组里追加更多的
{"emailAddress": {"address": "xxx"}}结构
如果你的第一个写法仍无法运行,大概率是$Body变量中包含了未转义的特殊字符(比如双引号、换行符),导致JSON格式损坏,此时用ConvertTo-Json构建JSON会更可靠,能自动处理特殊字符转义:
$messageParams = @{ message = @{ subject = $Subject body = @{ contentType = "HTML" content = $Body } toRecipients = @( @{ emailAddress = @{ address = "mail1@domain.com" } }, @{ emailAddress = @{ address = "mail4@domain.com" } } ) ccRecipients = @( @{ emailAddress = @{ address = "mail2@domain.com" } }, @{ emailAddress = @{ address = "mail3@domain.com" } }, @{ emailAddress = @{ address = "mail5@domain.com" } } ) } saveToSentItems = $true } $BodyJsonsend = $messageParams | ConvertTo-Json -Depth 3
内容的提问来源于stack exchange,提问作者Stefan Schulze
相关产品推荐
相关产品推荐

