C# ExchangeService突然看不到共享日历
一些最初由其他人编写的代码突然停止了它应该做的事情 代码应该从不同的帐户中查找共享日历并获取其中的事件,但它不再查找此共享日历或任何共享日历 我没有访问共享日历的帐户的权限,但我尝试从其他帐户共享日历,它也不会显示,但是在脚本使用的帐户中创建日历时,它看起来很好。 但当登录到帐户时,共享日历是可见的。可以创建和查看事件 我对exchange的了解有限,但我需要此脚本才能工作 我环顾四周,寻找已经回答了类似问题的问题,并尝试了一些解决方案,但到目前为止,没有一个有效,或者因为其他问题和/或缺乏知识而无法解决 据我所知,这方面没有任何变化,帐户所有者声称我完全可以访问日历,他们方面也没有任何变化。所以我不知道为什么这会突然停止工作 为了澄清,没有错误。try-catch不会触发,脚本会将文件夹列表打印到页面。 问题是此列表不包含站点上可见的共享日历C# ExchangeService突然看不到共享日历,c#,.net,office365,exchange-server,exchangewebservices,C#,.net,Office365,Exchange Server,Exchangewebservices,一些最初由其他人编写的代码突然停止了它应该做的事情 代码应该从不同的帐户中查找共享日历并获取其中的事件,但它不再查找此共享日历或任何共享日历 我没有访问共享日历的帐户的权限,但我尝试从其他帐户共享日历,它也不会显示,但是在脚本使用的帐户中创建日历时,它看起来很好。 但当登录到帐户时,共享日历是可见的。可以创建和查看事件 我对exchange的了解有限,但我需要此脚本才能工作 我环顾四周,寻找已经回答了类似问题的问题,并尝试了一些解决方案,但到目前为止,没有一个有效,或者因为其他问题和/或缺乏知识
const string EWSUrl = @"https://outlook.office365.com/ews/exchange.asmx";
const string EmailAdre = "myEmail";
const string EmailPass = "myPassword";
const string EmailDomi = "domi";
const string EmailCale = "targetAccount";
const int calFolderLimit = 200; // Limit on folder search
const int calMaxItemsReturned = 500; // Max limit cal fetch
const int calMonthLimit = 12; // How many months to fetch
const int calMonthBack = 1; // Update how many days back
// Tries to find one of this
const string calFolderName = "Ekonomi Årskalender";
const string calFolderID = "AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw+BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA==";
const string EWSUrl = @"https://outlook.office365.com/ews/exchange.asmx";
const string EmailAdre = "myEmail";
const string EmailPass = "myPassword";
const string EmailDomi = "domi";
const string EmailCale = "targetAccount";
const int calFolderLimit = 200; // Limit on folder search
const int calMaxItemsReturned = 500; // Max limit cal fetch
const int calMonthLimit = 12; // How many months to fetch
const int calMonthBack = 1; // Update how many days back
// Tries to find one of this
const string calFolderName = "Ekonomi Årskalender";
const string calFolderID = "AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw+BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA==";
protected string syncCalendar(HttpContext context)
{
string response = "";
try
{
// CONNECT TO EXCHANGE
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials(EmailAdre, EmailPass, EmailDomi);
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.EnableScpLookup = true;
service.AcceptGzipEncoding = true;
service.Url = new Uri(EWSUrl);
// Find Folder
FolderView folderView = new FolderView(calFolderLimit);
folderView.Traversal = FolderTraversal.Deep;
folderView.PropertySet = new PropertySet(FolderSchema.FolderClass, FolderSchema.DisplayName, FolderSchema.TotalCount, FolderSchema.ParentFolderId);
FindFoldersResults folders = service.FindFolders(new FolderId(WellKnownFolderName.Root), folderView);
foreach (var myFolder in folders.Folders)
{
if (myFolder is CalendarFolder && (myFolder.DisplayName == calFolderName || myFolder.Id.ToString() == calFolderID))
{
//Doing stuff with matched calendar folder
//Print name for debugging
response += "<div>" + myFolder.DisplayName + "</div>";
}
}
}
catch (Exception ex)
{
response += "[ERROR]<p>" + ex.Message + "<p/><p>" + ex.StackTrace + "</p>";
}
return response;
}
你发布的这段代码如果不与原作者交流就没有什么意义,很难确定为什么会这样做。让我们先看看 常量字符串calFolderID=AQMKAGU5NTDJYTE5LTZINWMTNDYZMI05MWQ4LWQ5MDCYMGA5UKGSUDW+BFjn7iHZ02H3gBAM/BOCLCWMESQKA2VRSW2EAAIBWQAAAA== 看起来像是您试图查找硬编码文件夹的ews文件夹ID?这不是一个好主意,例如,如果邮箱从OnPrem迁移到Office365,FolderId将不同,这将破坏代码,这是我的第一个猜测,如果你说它一开始就工作了,为什么它不工作 但是,如果您已经拥有文件夹的EWS FolderId,那么代码的其余部分是冗余的,您可以通过绑定FolderId来完成同样的事情,例如
FolderId fldId = new FolderId("AQMkAGU5NTdjYTE5LTZiNWMtNDYzMi05MWQ4LWQ5MDcyMgA1YjMwMTYALgAAA5ukgsUdw+BFjn7iHZ02H3gBAM/bOclCwmFEsqKa2vRsw2EAAAIBWQAAAA==");
Folder myFolder = Folder.Bind(service, fldId);
但最有可能的情况是,由于您要访问的文件夹ID可能已更改,快速修复它的唯一方法是打开您要绑定到的日历所在的目标邮箱并获取新的文件夹ID。您可以使用EWSDeditor来获取这些信息,而无需编写任何代码。一旦你有了快速修复工作,我会建议你重写整个事情,以防止它在未来破裂 那么,到底什么不起作用?你有什么错误吗?没有,没有错误,如果有,我会提到的。脚本只是不返回任何共享日历。我在帖子中补充了一个关于这一点的澄清。