调用Azure DevOps SendMail接口遇411及503错误求助
调用Azure DevOps SendMail API的问题排查与解决
问题描述
尝试调用Azure DevOps的SendMail接口时,遇到以下问题:
- 执行curl命令时提示URL格式错误,同时返回
HTTP Error 411. 请求必须是分块传输或包含内容长度 - 请求被重定向到登录页面
- 添加
Content-Length头后返回503服务不可用错误
原执行命令
endpoint=https://dev.azure.com/myorg/myproject/_apis/wit/sendmail?api-version=7.1-preview.1 body='{ "message": { "body": "Test Body", "cc": {}, "to": { "tfsIds": ["my-tfsIds-id"] }, "replyTo": {}, "subject": "Test Subject" }, projectId:"my-project-id" }' curl -X POST "$endpoint" --data "$body" -H "Authorization: Basic $pat" -H "Content-Type: application/json" -vL
错误日志
411错误日志
Note: Unnecessary use of -X or --request, POST is already inferred. * Closing connection -1 curl: (3) URL using bad/illegal format or missing URL <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Length Required</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Length Required</h2> <hr><p>HTTP Error 411. 请求必须是分块传输或包含内容长度。</p> </BODY></HTML>
重定向日志
* Connection #0 to host dev.azure.com left intact * Issue another request to this URL: 'https://xxxxx.vssps.visualstudio.com/_signin?realm=dev.azure.com&reply_to=https%3A%2F%2Fdev.azure.com%2FMYORG%2FMYPRODJECT%2F_apis%2Fwit%2Fsendmail%3Fapi-version%3D7.1-preview.1&redirect=xxxxxxxxxxxxxxxxx' * Switch from POST to GET * Trying xx.xxx.xx.xx:443... * Connected to xxxxx.vssps.visualstudio.com (xx.xxx.xx.xx:443) port 443 (#1)
503错误提示
抱歉!我们的服务目前不可用。
我们正在尽快恢复所有服务,请稍后重试。
如需查看服务最新状态,请访问我们的支持页面。
问题解决
1. 修复URL格式与411错误
核心问题为JSON语法错误、curl参数使用不当:
- JSON语法修正:原body中的
projectId键未用双引号包裹,不符合JSON规范,会导致请求体解析失败。 - curl参数调整:使用
--data-raw替代--data,避免shell解析请求体中的特殊字符;同时确保PAT已正确编码。
修正后的命令示例:
# 正确编码PAT(注意前面的冒号不可省略) pat_base64=$(echo -n ":${your_pat}" | base64) endpoint="https://dev.azure.com/myorg/myproject/_apis/wit/sendmail?api-version=7.1-preview.1" # 修正JSON格式,所有键用双引号包裹 body='{ "message": { "body": "Test Body", "cc": {}, "to": { "tfsIds": ["my-tfsIds-id"] }, "replyTo": {}, "subject": "Test Subject" }, "projectId": "my-project-id" }' # 执行请求,无需手动添加Content-Length,curl会自动处理 curl -vL "$endpoint" --data-raw "$body" -H "Authorization: Basic $pat_base64" -H "Content-Type: application/json"
2. 解决重定向到登录页面的问题
重定向是因为认证失败,需检查以下几点:
- PAT权限:确保PAT拥有**工作项(Work Items)**的读写权限,且作用域包含目标组织。
- 路径正确性:确认URL中的组织名
myorg、项目名myproject拼写完全正确(Azure DevOps路径区分大小写)。 - PAT编码:必须用
echo -n ":$PAT" | base64生成编码,不能遗漏前面的冒号,也不能包含多余换行符。
3. 处理503服务不可用错误
503是Azure DevOps服务端临时故障,与你的请求无关,可按以下方式处理:
- 检查Azure DevOps官方服务状态,确认是否有全局或区域故障。
- 等待10-15分钟后重试请求。
- 确保之前的请求错误(如JSON格式、认证问题)已全部修复,避免因无效请求触发的间接报错。
内容的提问来源于stack exchange,提问作者Bennimi
相关产品推荐
相关产品推荐

