博客地址:http://blog.csdn.net/FoxDave
上一篇文章我们实现了在.Net Core应用程序中去为用户分配一个许可的操作。本篇我们将实现更新用户Office 365中邮箱设置的操作。
准备一个新用户或现有的某个用户,我们可以更新他的时区、位置信息、工作时长等邮箱设置。为了保证篇幅,如何创建用户不在这里详述了。
我们可以使用Microsoft Graph的终结点/users/{id|userPrincipalName}|/mailboxSettings去访问用户的邮箱设置。获取邮箱设置的文档点击这里,更新邮箱设置的文档点击这里。
PS:点击更新邮箱设置的文档发现目前的标题是错误的,仍然是获取用户的邮箱设置,估计是翻译的时候不仔细。其实这样的问题还有很多,如果发现了果断给微软提出来啊,传送门。
跟之前示例的操作所需要的权限不同,读取和更新邮箱设置需要包括如下应用程序权限:User.Read.all, MailboxSettings.Read, MailboxSettings.ReadWrite。
可选项:还可以将Mail.Read应用程序权限也配置上,因为示例代码还演示了如何使用Microsoft Graph SDK来获取用户的收件箱。
我们就继续在之前创建的应用GraphTest上添加了。
配置完这些之后我们就要开始代码之旅了。
获取和设置用户邮箱默认的时区
下面的代码展示了帮助类的两个方法分别去获取和设置用户邮箱默认的时区。获取使用的是Microsoft Graph SDK,更精简一些。
public async Task GetUserMailboxDefaultTimeZone(string alias)
{
User user = FindByAlias(alias).Result;
User detailedUser = await _graphClient.Users[user.Id].Request().Select("MailboxSettings").GetAsync();
return detailedUser.MailboxSettings.TimeZone;
}
public async void SetUserMailboxDefaultTimeZone(string alias, string timezone)
{
User user = FindByAlias(alias).Result;
Uri Uri = new Uri("https://graph.microsoft.com/v1.0/users/"+ user.Id +"/mailboxSettings");
String jsonContent = "{\"timeZone\" : \""+ timezone +"\"}";
HttpContent httpContent = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");
await _httpClient.PatchAsync(Uri, httpContent);
}
注意,设置用户默认时区的方法使用的是HttpClient而不是SDK,是由于到目前为止,SDK还没有支持更新邮箱设置的方法,因此设置方法同时使用了SDK和HttpClient,SDK用来查找用户,HttpClient用来更新邮箱设置。
帮助类的方法完成之后,我们就可以在Program.cs中通过下面的代码调用它们:
private static void GetUserMailboxDefaultTimeZone()
{
const string alias = "admin";
var mailboxHelper = new MailboxHelper(_graphServiceClient);
var defaultTimeZone = mailboxHelper.GetUserMailboxDefaultTimeZone(alias).Result;
Console.WriteLine("Default timezone: "+ defaultTimeZone);
}
private static void SetUserMailboxDefaultTimeZone()
{
const string alias = "admin";
var mailboxHelper = new MailboxHelper(_graphServiceClient, _httpClient);
mailboxHelper.SetUserMailboxDefaultTimeZone(alias, "Eastern Standard Time");
}
我们为MailboxHelper类添加额外的方法去展示如何使用Microsoft Graph SDK去获取用户的消息,创建并获取消息规则。下面的几个代码片段封装了创建和获取邮箱消息规则的部分。
private static MessageRule BuildMailRule(string displayName, int sequence, bool isEnabled, string senderContains, string forwardToEmail)
{
IEnumerable senderContainsList = new string[]{senderContains};
EmailAddress email = new EmailAddress(){
Address = forwardToEmail
};
Recipient recipient = new Recipient(){
EmailAddress = email
};
IEnumerable recipientList = new Recipient[]{ recipient };
var msgRule = new MessageRule{
DisplayName = displayName,
Sequence = sequence,
IsEnabled = isEnabled,
Conditions = new MessageRulePredicates{
SenderContains = senderContainsList
},
Actions = new MessageRuleActions{
ForwardTo = recipientList
}
};
return msgRule;
}
public async Task CreateRule(string alias, string displayName, int sequence, bool isEnabled, string senderContains, string forwardToEmail)
{
MessageRule rule = BuildMailRule(displayName, sequence, isEnabled, senderContains, forwardToEmail);
User user = FindByAlias(alias).Result;
await _graphClient.Users[user.Id].MailFolders.Inbox.MessageRules.Request().AddAsync(rule);
}
上面的代码使用BuildMailRule方法去创建一个新的MessageRule对象,然后使用SDK向用户邮箱添加这个规则。遗憾的是现在没有办法通过Graph删除规则。
public async Task> GetUserMailboxRules(string alias)
{
User user = FindByAlias(alias).Result;
IMailFolderMessageRulesCollectionPage rules = await _graphClient.Users[user.Id].MailFolders.Inbox.MessageRules.Request().GetAsync();
List items = new List();
if (rules?.Count > 0)
{
foreach (MessageRule rule in rules)
{
items.Add(new ResultsItem{
Display = rule.DisplayName,
Id = rule.Id
});
}
}
return items;
}
上面的方法使用SDK去获取消息规则并存储到集合中。
示例代码已更新,新增类ResultsItems.cs和MailboxHelper.cs,修改Program.cs,戳这里。
运行之后如何在验证结果呢?登录Office 365门户,点击右上角的齿轮设置图标,如下图的位置可以查看时区设置:
邮件的规则,可以在首页点击OutLook,然后点击右上角齿轮图标,最下面选择应用设置中的邮件,在邮件 - 自动处理 - 收件箱和整理规则位置可以看到添加的规则。