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

时间:2015-03-12 12:04:03

标签: c# office365 exchangewebservices email-attachments

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

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

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

所以我已经完成了这些更改,我已经使用ExchangeService" Exchange2013_SP1获得了ExchangeService的ExchangeVersion。

在.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或其他东西,但在文档中没有提到它。仅提及您需要启用https才能访问Exchange服务器。

2 个答案:

答案 0 :(得分:4)

我尝试使用&#34;来自电子邮件地址&#34;进行过滤的方式存在2个问题。

第一个问题是杰森提到的。在我的ItemView中,我已经包含了PropertySet值&#39; EmailMessageSchema.Sender&#39;这不是一个字符串。将其更改为&#39; EmailMessageSchema.From&#34;尝试在Office365 Exchange服务器上进行过滤时没有任何区别。

注意:在域交换服务器上使用此不正确的属性集(.Sender)仍然可以用于任何奇怪的原因。

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

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

不起作用。当检查传入来自它不是电子邮件地址时,它是&#34;用户名/域/ Otherthings / Admin Group / Etc / Etc&#34;

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

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

我希望这可以帮助某人并拯救他们给我带来的挫败感。从我见过的文档(SearchFilter.ContainsSubstring和EWS Managed Api开始......)中没有提到这一点。

答案 1 :(得分:1)

如果我关注你,我认为你说FindItems没有结果。在ContainsSubstring属性上执行Sender过滤器是有问题的(因为发件人不是字符串属性)。请参阅EWS SearchFilter.ContainsSubstring to filter on Sender Email Address