我正在尝试了解如何在为Microsoft Graph 'Mail.Send‘和'User.Read’创建一个具有‘应用程序权限’的Azure AD应用程序后,使用Microsoft Graph sendMail API发送邮件。我成功地使用client_id、tenant_id和client_secret获得了一个明显有效的令牌,然后像这样向api提交了一个POST (R代码):
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“的内容是:
{
    "message": {
        "subject": "Meet for lunch?",
        "body": {
            "contentType": "Text",
            "content": "The new cafeteria is open."
        },
        "toRecipients": [
            {
                "emailAddress": {
                    "address": "someone@somewhere.com"
                }
            }
        ]
    }
}但是,我得到了这个404响应:
"{\"error\":{\"code\":\"ErrorInvalidUser\",\"message\":\"The requested user 'foobar@private.com' is invalid.\"}}"我使用的微软帐户是私有的,上面用foobar@private.com表示的地址是该帐户的主要“签名”邮件地址。我不确定这个用户是否需要一些特殊的权限,或者它是否必须是一个“企业帐户”。我们的计划是在微软公司的账户中使用它来发送邮件,但我目前正在测试一个私人账户,以确定它是如何工作的。
发布于 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来冒充其他人。我不清楚这个限制是如何起作用的。
https://stackoverflow.com/questions/66777019
复制相似问题