首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Microsoft Graph API - sendMail API错误-“请求的用户'foobar@private.com‘无效。”

Microsoft Graph API - sendMail API错误-“请求的用户'foobar@private.com‘无效。”
EN

Stack Overflow用户
提问于 2021-03-24 16:08:09
回答 2查看 175关注 0票数 0

我正在尝试了解如何在为Microsoft Graph 'Mail.Send‘和'User.Read’创建一个具有‘应用程序权限’的Azure AD应用程序后,使用Microsoft Graph sendMail API发送邮件。我成功地使用client_id、tenant_id和client_secret获得了一个明显有效的令牌,然后像这样向api提交了一个POST (R代码):

代码语言:javascript
运行
复制
from_address <- "foobar@private.com"
    
url <- paste0("https://graph.microsoft.com/v1.0/users/", from_address, "/sendMail")
resp <- POST(url,
             add_headers(.headers = c(content_type = "application/json",
                                      Authorization = paste("Bearer", token))),
             body = upload_file("mail.json"))

"mail.json“的内容是:

代码语言:javascript
运行
复制
{
    "message": {
        "subject": "Meet for lunch?",
        "body": {
            "contentType": "Text",
            "content": "The new cafeteria is open."
        },
        "toRecipients": [
            {
                "emailAddress": {
                    "address": "someone@somewhere.com"
                }
            }
        ]
    }
}

但是,我得到了这个404响应:

代码语言:javascript
运行
复制
"{\"error\":{\"code\":\"ErrorInvalidUser\",\"message\":\"The requested user 'foobar@private.com' is invalid.\"}}"

我使用的微软帐户是私有的,上面用foobar@private.com表示的地址是该帐户的主要“签名”邮件地址。我不确定这个用户是否需要一些特殊的权限,或者它是否必须是一个“企业帐户”。我们的计划是在微软公司的账户中使用它来发送邮件,但我目前正在测试一个私人账户,以确定它是如何工作的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-07 14:03:56

问题中关于如何POST到Microsoft Graph SendMail api的描述是正确的。问题只出现在Microsoft Azure门户Active directory中的应用程序配置中。tenant的管理员创建了一个具有两个权限的应用程序,该应用程序具有“管理员同意”。第一个是委派权限,第二个是应用程序权限Microsoft Graph: 'Send mail as any user'。第一个用于获取有效期为1小时的令牌,第二个用于您在问题中看到的代码中,用于发送带有所需令牌的邮件本身。我被告知有一个限制,它只允许从组织中的一个特定的“无回复”地址发送邮件,所以你不能使用api来冒充其他人。我不清楚这个限制是如何起作用的。

票数 1
EN

Stack Overflow用户

发布于 2021-03-25 12:22:56

syntax for the call

代码语言:javascript
运行
复制
POST /users/{id | userPrincipalName}/sendMail

棘手的是,据我所知,微软的个人账户没有userPrincipalName。你的"foobar@private.com“是一个电子邮件地址,但它不用作Azure Active Directory或图形中的标识符。

取而代之的是,你必须使用你的ID。

代码语言:javascript
运行
复制
GET /me

ID是响应中的id字段。

请注意,当涉及到工作和学校帐户时,在通话中使用电子邮件地址可能会遇到另一个问题。通常,人们会有一个像"firstname.lastname@company.com“这样的地址,但这只是一个方便的别名;他们的userPrincipalName可能是更隐秘的东西,比如"id123456@companytenantname.com”。因此,最好始终使用ID。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66777019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档