EWS 托管 Api - 从 Office365 交换服务器检索电子邮件

EWS Managed Api - Retrieving e-mails from Office365 exchange server

我最初连接到域内交换服务器并从收件箱中的电子邮件中检索附件文件。这很好用,它正在验证、检索文件(甚至其他文件夹)。现在我已经切换到 Office365 交换服务器。

我已阅读文档并了解以下内容必须为假,您必须手动通过凭据,如下所示。

// Service.UseDefaultCredentials = true;
Service.Credentials = new WebCredentials(ExchangeEmail, ExchangePassword);

所以我完成了这些更改,我的 ExchangeService 的 ExchangeVersion 设置为“Exchange2013_SP1。

.AutodiscoverUrl 调用后检查服务,可以看出它正在检索 url 等。所以它看起来肯定是连接到服务器。我现在没主意了,我已经关注了 EWS Managed Api 的 msdn 页面,但不太明白为什么它现在不再挑选电子邮件了。

另一个重要的一点是我正在做一个过滤器搜索(在域交换中工作)。域邮箱结构与office365邮箱相同

这是我无法从中找到项目的片段:

var view = new ItemView(10, 0, OffsetBasePoint.Beginning)
                       {
                           PropertySet =
                               new PropertySet(
                               BasePropertySet.IdOnly,
                               EmailMessageSchema.Sender,
                               ItemSchema.DateTimeReceived)
                       };

        var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, FromEmailAddress);
        FindItemsResults<Item> results;

        do
        {
            results = Service.FindItems(vacancyFolderId, filter, view);

我做的另一个测试是保持简单,尝试通过 ews 管理 api 发送电子邮件。这按预期工作。我怀疑我的附件检索代码需要进行细微的更改。也许它是 https 或其他东西,但文档中没有提到它。只提到访问exchange服务器需要开启https。

如果我关注你,我认为你是在说 FindItems returns 没有结果。在 Sender 属性 上执行 ContainsSubstring 过滤器是有问题的(因为发件人不是字符串 属性)。参见

我尝试按 "from email address" 过滤的方式有 2 个问题。

第一个问题 是 Jason 提到的。在我的 ItemView 中,我包含了 PropertySet 值 'EmailMessageSchema.Sender',这不是字符串。尝试在 Office365 交换服务器上进行过滤时,将其更改为“EmailMessageSchema.From”没有任何区别。

注意:出于任何奇怪的原因,在域交换服务器上使用这个不正确的 属性 集 (.Sender) 仍然有效。

第二个问题 使用以下语法查询 Office365 服务器时过滤依据:

var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, FromEmailAddress);

无效。检查传入发件人时,它不是电子邮件地址,而是 "Username/Domain/Otherthings/Admin Group/Etc/Etc" .

解决方法使用查询字符串过滤器。

var querystring = "HasAttachments:true From:foo@bar.com Kind:email";

我希望这对某些人有所帮助,并让他们免于这件事给我带来的挫败感。从我看到的文档(SearchFilter.ContainsSubstring 和 EWS Managed Api 开始..)没有提到这一点。