Microsoft Graph SDK (C#) 组邮箱
Microsoft Graph SDK (C#) Group Mailbox
我有一个连接的控制台应用程序,我正在编写它来帮助自动化即将到来的租户迁移。
我想要做的是从我们当前的租户中删除自定义域的所有关联,以便我可以将它们添加到新租户。
我目前拥有的:
ConsoleApp 已在 AAD 中注册,API 权限已分配并同意。
我导入了以下内容:
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client
初始化一个graphClient
:
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
并成功对图表进行了 .GetAsync
次调用。
我需要什么帮助:
我正在尝试将群组的电子邮件更新为 'gItem.mailNickname@tenantID'
。我有一个错误说 "Mail field is read-only"。通过 Graph Explorer,我注意到 proxyAddresses
字段包含该组的所有别名,并且邮件列为 "SMPT:..." 我正在尝试用 [= 覆盖 proxyAddresses
字段24=]
var upGroup = await graphClient
.Groups["4f629be4-f592-4520-b80d-7570f68e276e"]
.Request()
.GetAsync();
var updateFields = new Group
{
ProxyAddresses = new List<string>()
{
"SMPT:" + upGroup.MailNickname + "@" + tenantID,
}
};
await graphClient
.Groups[upGroup.Id]
.Request()
.UpdateAsync(updateFields);
我收到权限不足的错误,但已检查 AAD 以确保 Directory.ReadWrite.All
和 Groups.ReadWrite.All
均已配置和授予。
可以更改其他组属性,这让我质疑我在 proxyAddresses
属性.
上的结构
无法将代码添加到列表
var updateFields = new Group
{
ProxyAddresses = new string[] { "SMTP:" + upGroup.MailNickname + "@" + tenantID }
};
完整代码:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
namespace RemoveGroupAliases
{
class Program
{
private static string clientId = "";
private static string tenantID = "";
private static string clientSecret = "";
private static IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantID)
.WithClientSecret(clientSecret)
.Build();
static ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
static async Task Main(string[] args)
{
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
var groups = await graphClient
.Groups
.Request()
.Filter("mailEnabled+eq+true")
.GetAsync();
foreach (var tgroup in groups)
{
Console.WriteLine(tgroup.Id);
Console.WriteLine(tgroup.DisplayName);
};
var upGroup = await graphClient
.Groups["4f629be4-f592-4520-b80d-7570f68e276e"]
.Request()
.GetAsync();
var updateFields = new Group
{
ProxyAddresses = new List<String>()
{
"SMTP:" + upGroup.MailNickname + "@" + tenantID
}
};
await graphClient
.Groups[upGroup.Id]
.Request()
.UpdateAsync(updateFields);
Console.ReadLine();
}
}
}
我的想法是提取所有启用邮件的组并删除所有域,以便我可以将其从该租户中删除并将其关联到新租户。一旦域被切换,我将有一个不同的程序来分配域和别名。当我将鼠标悬停在 proxyAddresses
的工具提示上时,最后一行显示 "Read-Only" 这可能是我的问题,但我没有将其视为错误。
您描述的情况根本不可能发生。您不能从一个租户分离组(或任何数据)并将其迁移到另一个租户。每个 AAD 租户都是一个独特的实体,与任何其他租户隔离。
Microsoft Graph 使用您提供的令牌将您的请求路由到生成令牌的租户中的正确 API/Service。您不能将单个令牌连接到多个租户。
此外,如 documentation 中所述,属性 mail
和 proxyAddresses
是只读的。如果您希望更改群组的电子邮件别名,您可以可以更改mailNickname
属性。这只是组的 "alias",电子邮件地址的域部分由 AAD 和 Exchange 自动分配 ({mailNickname}@{default.tenant.domain}
)。
我有一个连接的控制台应用程序,我正在编写它来帮助自动化即将到来的租户迁移。
我想要做的是从我们当前的租户中删除自定义域的所有关联,以便我可以将它们添加到新租户。
我目前拥有的:
ConsoleApp 已在 AAD 中注册,API 权限已分配并同意。
我导入了以下内容:
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client
初始化一个graphClient
:
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
并成功对图表进行了 .GetAsync
次调用。
我需要什么帮助:
我正在尝试将群组的电子邮件更新为 'gItem.mailNickname@tenantID'
。我有一个错误说 "Mail field is read-only"。通过 Graph Explorer,我注意到 proxyAddresses
字段包含该组的所有别名,并且邮件列为 "SMPT:..." 我正在尝试用 [= 覆盖 proxyAddresses
字段24=]
var upGroup = await graphClient
.Groups["4f629be4-f592-4520-b80d-7570f68e276e"]
.Request()
.GetAsync();
var updateFields = new Group
{
ProxyAddresses = new List<string>()
{
"SMPT:" + upGroup.MailNickname + "@" + tenantID,
}
};
await graphClient
.Groups[upGroup.Id]
.Request()
.UpdateAsync(updateFields);
我收到权限不足的错误,但已检查 AAD 以确保 Directory.ReadWrite.All
和 Groups.ReadWrite.All
均已配置和授予。
可以更改其他组属性,这让我质疑我在 proxyAddresses
属性.
无法将代码添加到列表
var updateFields = new Group
{
ProxyAddresses = new string[] { "SMTP:" + upGroup.MailNickname + "@" + tenantID }
};
完整代码:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
namespace RemoveGroupAliases
{
class Program
{
private static string clientId = "";
private static string tenantID = "";
private static string clientSecret = "";
private static IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithTenantId(tenantID)
.WithClientSecret(clientSecret)
.Build();
static ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
static async Task Main(string[] args)
{
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
var groups = await graphClient
.Groups
.Request()
.Filter("mailEnabled+eq+true")
.GetAsync();
foreach (var tgroup in groups)
{
Console.WriteLine(tgroup.Id);
Console.WriteLine(tgroup.DisplayName);
};
var upGroup = await graphClient
.Groups["4f629be4-f592-4520-b80d-7570f68e276e"]
.Request()
.GetAsync();
var updateFields = new Group
{
ProxyAddresses = new List<String>()
{
"SMTP:" + upGroup.MailNickname + "@" + tenantID
}
};
await graphClient
.Groups[upGroup.Id]
.Request()
.UpdateAsync(updateFields);
Console.ReadLine();
}
}
}
我的想法是提取所有启用邮件的组并删除所有域,以便我可以将其从该租户中删除并将其关联到新租户。一旦域被切换,我将有一个不同的程序来分配域和别名。当我将鼠标悬停在 proxyAddresses
的工具提示上时,最后一行显示 "Read-Only" 这可能是我的问题,但我没有将其视为错误。
您描述的情况根本不可能发生。您不能从一个租户分离组(或任何数据)并将其迁移到另一个租户。每个 AAD 租户都是一个独特的实体,与任何其他租户隔离。
Microsoft Graph 使用您提供的令牌将您的请求路由到生成令牌的租户中的正确 API/Service。您不能将单个令牌连接到多个租户。
此外,如 documentation 中所述,属性 mail
和 proxyAddresses
是只读的。如果您希望更改群组的电子邮件别名,您可以可以更改mailNickname
属性。这只是组的 "alias",电子邮件地址的域部分由 AAD 和 Exchange 自动分配 ({mailNickname}@{default.tenant.domain}
)。