Tag: office365

使用System.Net.Mail通过Exchange Online发送SMTP电子邮件(Office 365)

我们正在testing新的Office 365testing版,并且在Exchange Online服务上有一个邮件帐户。 现在我试图连接一个LOB应用程序,可以从我的testing帐户发送smtp电子邮件。 但是,Exchange 365平台需要在端口587上进行TLSencryption,并且System.Net.Mail有一个“function”,不允许隐式SSLencryption。 有没有人设法让C#通过这个平台发送邮件? 我有以下基本的代码,应该发送邮件 – 任何意见,将不胜感激。 SmtpClient server = new SmtpClient("ServerAddress"); server.Port = 587; server.EnableSsl = true; server.Credentials = new System.Net.NetworkCredential("username@mydomain.com", "password"); server.Timeout = 5000; server.UseDefaultCredentials = false; MailMessage mail = new MailMessage(); mail.From = new MailAddress("recipent@anyaddress"); mail.To.Add("username@mydomain.com"); mail.Subject = "test out message sending"; mail.Body = "this is my message body"; […]

EWS API – 重新创build通知订阅时出错

在处理与Office365日历文件夹的订阅时,我在SendNotification请求中收到了很多ErrorReadEventsFailed消息。 这个错误基本上意味着订阅不能再被发现,并且服务器不应该再期望新的通知。 检查微软build议的error handling ,解决scheme是使用自动发现重新发现ExternalEwsUrl或EwsPartnerUrl,并创build一个新的订阅。 使用Office365,AutoDiscovery服务似乎几乎不可能与OAuth2服务帐户的组合,所以我一直使用https://outlook.office365.com/EWS/Exchange.asmx作为主要的EWS端点。 但是,当我尝试创build新的订阅特定的日历文件夹,我不断得到一个通用的500 ErrorNoRespondingCASInDestinationSite错误: Exchange Web服务目前不可用于此请求,因为目标站点中的任何客户端访问服务器都不能处理该请求。 奇怪的部分是这只发生在收到最初的ErrorReadEventsFailed错误后直接发生 。 如果我再次尝试,例如30秒,请求就会顺利通过。 在做了一些研究之后,似乎大多数用户发现有助于确保为服务帐户希望模拟的用户正确设置X-AnchorMailbox头。 我仔细检查了这个头,这确实是在请求重新订阅发送。 这个问题可以通过指数回退解决scheme解决,也可以通过重试X次直到请求通过。 在我看来,当订阅“丢失”,O365服务需要时间来更改Exchange服务器的DNS(这是我能想到的唯一的事情)。 任何帮助将不胜感激!

Outlook – 阅读另一个用户的日历

我正在开发基于Outlook-SDK-Android的Android应用程序。 该应用程序与Outlook日历REST API会谈,以检索,预订和删除事件(请参阅此处和这里的代码示例)。 现在我需要阅读别人的日历,并且已经向其他用户提供了具有委托访问( 作者权限级别 )的Office365帐户。 我已经使用新门户上提供的帐户注册了我的应用程序。 在我的应用程序中,我使用范围“ https://outlook.office.com/Calendars.ReadWrite ”。 (该范围用于com.microsoft.aad.adal.AuthenticationContext.acquireToken() 为Android OutlookClient(由orc-for-android提供的共享客户端堆栈)初始化Office REST客户端 ) 当我尝试读取另一个用户的日历时,我只能收到一个403响应: { "error": { "code": "ErrorAccessDenied", "message": "Access is denied. Check credentials and try again." } } 任何帮助? 这是API的限制吗? 如果是这样,为什么提供下面的方法调用链呢? outlookClient.getUsers() .getById("meetingRoom@company.com") .getCalendarView() 更新: 似乎有正在进行的工作 ,将允许这种情况下,这里报告: Office 365 REST API – 访问会议室日历 所以如果在这方面取得进展,我可以在不使用“ pipe理服务应用程序 ”的情况下实现自己的目标吗? (请参阅Office 365 API或Azure AD Graph […]

EWS – 访问所有共享日历

我有以下代码: private void ListCalendarFolders(ref List<EBCalendar> items, int offset) { var pageSize = 100; var view = new FolderView(pageSize, offset, OffsetBasePoint.Beginning); view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties); view.PropertySet.Add(FolderSchema.DisplayName); view.PropertySet.Add(FolderSchema.EffectiveRights); view.Traversal = FolderTraversal.Deep; FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.MsgFolderRoot, view); foreach (Folder myFolder in findFolderResults.Folders) { if (myFolder is CalendarFolder) { var folder = myFolder as CalendarFolder; items.Add(EBCalendar.FromEWSFolder(folder)); } } if […]

整洁的方式获得环境(即Office版本)

不幸的是,在所有环境中,office API的某些function并不完全相同(例如:Excel Online和Excel 2013中的格式)。 另外,一些不错的新function在Excel 2013中不可用,但在Excel 2016中可用(Excel.js) 当然,我可以告诉用户他们只能在2016年使用我的应用程序,而不是实现在所有环境中都不完全支持的事情。 我宁愿将自己的应用程序提供给Excel 2013的用户,即使他们没有办法(或倾向于)升级到2016年。我宁愿在function较差的环境中优雅地降级我的function列表,而不是将应用程序function限制为整个) 封装与文档的所有交互并根据环境运行不同的代码是很容易的。 也就是说,如果我知道我所处的确切环境是什么。当前的office.js提供了一个很好的方式来发现主机应用程序的版本和上下文(在线/离线)吗? 我无法在office.context等中find任何东西。 网上有一些关于整个.getContext链入侵的build议,但这些链接似乎是“无证”( http://wp.sjkp.dk/how-to-detect-if-an-app-for-office-is – 从办公室打开/ ),所以我不是很高兴。 有什么build议么?