如何在Office365上决定退回EmailMessage?

时间:2015-03-03 16:41:51

标签: c# email exchange-server exchangewebservices

我使用Exchange网络服务从Office365读取电子邮件。 C#程序运行正常。我可以在收件箱中获取EmailMessage,并获取他们的主题和邮件正文等。但是,我无法弄清楚检查邮件是否是退回邮件的方式。

我是否必须解析消息体,看是否有一些特殊的句子,即。邮件传递失败?如果是这样,是否有可能不同的电子邮件服务器用不同的单词反弹电子邮件?即一些使用“邮件传递失败”,有些使用“邮件传递未成功”#? (只是一个例子,我不知道这是否属实)

或者,消息对象有一个可用于此目的的属性?

由于

***刚发现交换网络服务无法看到'反弹' INBOX中的消息。我使用下面的代码,可以看到所有消息'除了Bounce Back之外。我是否会错过任何过滤te反弹消息的内容?它们实际上是INBOX,未读,我可以从Office365页面看到它。

private static void ProcessEmailMessages(SearchFolder searchFolder, Folder folderHistory, Folder folderBounceBack)
{
    if (searchFolder == null)
    {
        return;
    }

    const Int32 pageSize = 50;
    ItemView itemView = new ItemView(pageSize);

    PropertySet itempropertyset = new PropertySet(BasePropertySet.FirstClassProperties);
    itempropertyset.RequestedBodyType = BodyType.Text;
    itemView.PropertySet = itempropertyset;

    PropertySet propertySet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.DisplayName);
    folderHistory.Load(propertySet);
    folderBounceBack.Load(propertySet);

    FindItemsResults<Item> findResults = null;
    do
    {
        findResults = searchFolder.FindItems(itemView);
        foreach (Item item in findResults.Items)
        {
            if (item is EmailMessage)
            {
                // load body text
                item.Load(itempropertyset);

                EmailMessage email = item as EmailMessage;
                //email.Move(folder.Id);

                // check email subject to find the bounced emails
                bool subjectContains = Regex.IsMatch(email.Subject, "Mail Delivery Failure", RegexOptions.IgnoreCase);
                bool bodyContains = Regex.IsMatch(email.Subject, "Delivery", RegexOptions.IgnoreCase);
                if (subjectContains || bodyContains)
                {
                    email.Move(folderBounceBack.Id);
                    Console.WriteLine("Move the Bounced email: {0}", email.Subject);

                    ShowMessageInfo(email);
                }
                else
                {
                    email.Move(folderHistory.Id);
                    Console.WriteLine(">>> Keep the email: {0}", email.Subject);
                }
            }
        }

        itemView.Offset += pageSize;
    } while (findResults.MoreAvailable);
}

2 个答案:

答案 0 :(得分:1)

检查ItemClass属性。像这样的消息应该有一个包含“REPORT”的类。

答案 1 :(得分:1)

我在O365环境中使用EWS来帮助处理退回并使用以下代码从用户那里获取NDR&#39;收件箱中。

scanf

希望它有所帮助。