我们公司有12名协调员。每个协调员管理一堆个人联系人。
我们有一个夜间任务,填充SQL Server TABLE
,其中包含个人联系信息。
TABLE
中的数据被提取到12个不同的CSV files
中,然后发送给每个协调员。
协调员有责任导入此CSV file
到他的Outlook中,以使他的个人联系人列表保持最新(是的,这些个人联系人每天都在变化)。
对于大多数协调员来说,CSV文件的整个导入有点太多了,目标是自动执行此操作,或者让某些东西同步Outlook个人联系人,以便这些协调员不会做每日手动任务。
我已经创建了一个C#控制台应用程序,并且我添加了ADAL和Microsoft Graph客户端库NuGet包。
我已在Azure中正确注册了我的应用,并获得了Client Id
和Client Secret
。
我已经设置了适当的Application and Delegated permissions
。
我可以运行该应用程序,获取token
并调用Microsoft Graph客户端。
在撰写本文时,我的问题是Microsoft Graph不支持Contact List
的创建,也不允许我在此Contact List
中添加,删除或更新个人联系人。
无法使用Groups
。每次将用户添加到组时,都会向该特定用户发送一封电子邮件,告知他已将其添加到组中。
此外,同一个用户可以将自己从群组中移除,我们根本就不希望这样。
Microsoft Graph还支持创建Folders
并将人员添加到这些文件夹,但不幸的是,我发现这些文件夹的唯一目的是组织内容......
使用文件夹,我无法向特定文件夹发送电子邮件,而该文件夹又会向该文件夹中的所有人发送电子邮件。这就是Contact List
的目的......但是,在撰写本文时,API没有Contact List
的任何内容。
有没有人有更好的建议或解决方法来完成我的任务?
我不介意重写整个控制台应用程序甚至完全改变整个方法(比如使用Powershell)
我所关心的是不再手动导入一个CSV file
这些12个协调员。
提前致谢。
PS:我甚至调查了Microsoft Flow,但没有找到可以更新Outlook个人联系人的Flow。
答案 0 :(得分:0)
目前,Microsoft Graph和Outlook REST API都不支持“联系人群组”。
但您可以使用EWS Managed API以编程方式创建它们。在How to: Create contact groups by using EWS in Exchange中有一个示例C#代码的演练。
答案 1 :(得分:0)
如果有人关心,这是最终结果......
static void Main(string[] args)
{
try
{
var domain = "mydomain.com";
var email = "service_account@mydomain.com";
var accountPassword = "Password1";
var emailToImpersonify = "frank_underwood@mydomain.com";
var contactGroupDisplayName = "MySuperAmazingContactGroup";
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.Credentials = new NetworkCredential(email, accountPassword, domain);
service.AutodiscoverUrl(email, RedirectionUrlValidationCallback);
// Make sure the account [service_account@mydomain.com] is a member of the ApplicationImpersonation admin role.
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, emailToImpersonify);
// Prior to creating the ContactGroup, check and delete any pre-existing ContactGroup
SearchFilter sfSearch = new SearchFilter.IsEqualTo(ContactGroupSchema.DisplayName, contactGroupDisplayName);
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Contacts, sfSearch, new ItemView(int.MaxValue));
if (results != null)
{
foreach (Item item in results)
item.Delete(DeleteMode.HardDelete);
}
// Create the new ContactGroup with a few members
ContactGroup newContactGroup = new ContactGroup(service);
newContactGroup.DisplayName = contactGroupDisplayName;
newContactGroup.Members.Add(new GroupMember("user1@contoso.com"));
newContactGroup.Members.Add(new GroupMember("user2@contoso.com"));
newContactGroup.Save();
}
catch (Exception ex)
{
throw ex;
}
}