Azure DevOps API邮件发送问题:CURL命令无法发送邮件
解决Azure DevOps Send Mail API的clientMessage为空问题
你的问题出在请求体结构上——你把邮件内容嵌套在了message字段里,还做了不必要的双重转义,导致API无法解析出有效的clientMessage,所以抛出了空值错误。
Azure DevOps的Send Mail API要求请求体是直接包含收件人、主题、正文等字段的JSON对象,不需要额外包裹在message键下。修改你的curl命令的--data参数即可:
ADO_API=$(echo "$(System.CollectionUri)$(System.TeamProject)/_apis/wit/sendmail?api-version=7.1-preview.1") curl --request POST "$ADO_API" \ --header "Authorization: Bearer $SYSTEM_ACCESSTOKEN" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data '{ "to": {"emailAddresses": ["my_email_address"]}, "subject": "Test email", "body": "Empty body", "replyTo": {"emailAddresses": ["my_email_address"]} }'
关键修改点:
- 移除了外层的
"message"键,直接传递邮件结构的JSON - 用单引号包裹整个JSON内容,内部双引号无需转义(Bash中单引号内的内容会被原样解析)
- 格式化JSON结构(可选,仅为提升可读性,不影响功能)
如果需要在JSON中使用Bash变量(比如动态替换邮箱地址),可以改用双引号包裹JSON并对内部双引号转义,或者用jq工具构造JSON来避免转义问题。
另外,你可以给curl命令添加-v参数,查看完整的请求和响应详情,方便进一步排查问题:
curl -v --request POST "$ADO_API" \ --header "Authorization: Bearer $SYSTEM_ACCESSTOKEN" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data '{...}'
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

