如何搜索多行文字到电子邮件正文?

问题描述 投票:0回答:1

如何搜索多行文字到电子邮件正文

Remote Server returned '550 No Such User Here'Remote Server returned '554 5.4.4 SMTPSEND.DNS.NonExistentDomain; nonexistent domain'Either there are no alternate hosts, or delivery failed to all alternate hosts。这是我的代码,用于显示未送达或退回电子邮件的正文:

private static void DisplayBody(ExchangeService service)
{
        PropertySet itemProperty = new PropertySet();
        itemProperty.RequestedBodyType = BodyType.Text;
        itemProperty.Add(ItemSchema.Body);
        SearchFilter.SearchFilterCollection searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));

        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.Note.NDR"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.Note.DR"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.Note.DELAYED"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.Note.IPNRN"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.Note.IPNNRN"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.SMIME.NDR"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.SMIME.DR"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.NoteSMIME.MULTIPARTSIGNED.NDR"));
        searchFilter.Add(new SearchFilter.ContainsSubstring(ItemSchema.ItemClass, "REPORT.IPM.Note.SMIME.MULTIPARTSIGNED.DR"));
        PropertySet FindItemPropertySet = new PropertySet(BasePropertySet.IdOnly);

        ItemView view = new ItemView(999);
        view.PropertySet = FindItemPropertySet;
        PropertySet GetItemsPropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
        GetItemsPropertySet.RequestedBodyType = BodyType.Text;

        FindItemsResults<Item> findResults = null;

        do
        {
            findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
            if (findResults.Items.Count > 0)
            {
                service.LoadPropertiesForItems(findResults.Items, GetItemsPropertySet);
                foreach (Item Item in findResults.Items)
                {
                    string EmailHeader = Item.Body.Text;
                    Console.WriteLine(Item.Body.Text);
                }
            }
        } while (findResults.MoreAvailable);
}

任何人都可以帮助我,或者提前告诉我如何在电子邮件正文中搜索,并提前感谢新年快乐

c# regex exchangewebservices
1个回答
0
投票

如果你可以假设你的短语没有跨行分解,你可以只查找它们:

var EmailBody = Item.Body.Text;
var messages = new[] {
    "Remote Server returned '550 No Such User Here'",
    "Remote Server returned '554 5.4.4 SMTPSEND.DNS.NonExistentDomain; nonexistent domain'",
    "Either there are no alternate hosts, or delivery failed to all alternate hosts." };

var found = messages.Any(m => EmailBody.Contains(m));

如果它们可能被分解,你可以使用Regex并处理所有空格:

var EmailBody = Item.Body.Text;
var messages = (new[] {
    "Remote Server returned '550 No Such User Here'",
    "Remote Server returned '554 5.4.4 SMTPSEND.DNS.NonExistentDomain; nonexistent domain'",
    "Either there are no alternate hosts, or delivery failed to all alternate hosts." })
    .Select(m => Regex.Escape(m).Replace(@"\ ",@"\s+"))
    .ToArray();


var found = messages.Any(m => Regex.IsMatch(EmailBody, m));

如果它们可以在单词中间跨越线条,那就更难了,但我认为这不太可能。

要返回匹配的消息,您可以执行以下操作:

var foundMessages = messages.Where(m => EmailBody.Contains(m)).ToList();

然后foundMessages.Count会告诉你是否找到了。

© www.soinside.com 2019 - 2024. All rights reserved.