我正在尝试了解如何在为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来冒充其他人。我不清楚这个限制是如何起作用的。
发布于 2021-03-25 12:22:56
POST /users/{id | userPrincipalName}/sendMail棘手的是,据我所知,微软的个人账户没有userPrincipalName。你的"foobar@private.com“是一个电子邮件地址,但它不用作Azure Active Directory或图形中的标识符。
取而代之的是,你必须使用你的ID。
GET /meID是响应中的id字段。
请注意,当涉及到工作和学校帐户时,在通话中使用电子邮件地址可能会遇到另一个问题。通常,人们会有一个像"firstname.lastname@company.com“这样的地址,但这只是一个方便的别名;他们的userPrincipalName可能是更隐秘的东西,比如"id123456@companytenantname.com”。因此,最好始终使用ID。
https://stackoverflow.com/questions/66777019
复制相似问题