IMAP‑e‑postfiltrering – metoder, kriterier och kodexempel

Grundläggande meddelandefiltrering

Den ImapClient klass tillhandahåller ListMessages() metod som hämtar alla meddelanden från en brevlåda. För att bara få meddelanden som matchar ett villkor, använd den överlagrade ListMessages() metod som tar MailQuery som argument.  MailQuery klassen tillhandahåller olika egenskaper för att specificera villkoren, t.ex. datum, ämne, avsändare, mottagare osv. Det första exemplet visar hur man filtrerar meddelanden baserat på datum och ämne. Vi visar också hur man filtrerar på andra kriterier och hur man bygger mer komplexa frågor. API:et ger även möjlighet att använda skiftlägeskänsliga sökkriterier för att matcha exakta filtreringskriterier. API:et möjliggör även att ange kodning för söksträngen vid filtrering av meddelanden från brevlådan.

Filtrera meddelanden från brevlåda

  1. Anslut och logga in på en IMAP‑server
  2. Skapa en instans av MailQuery och ange egenskaperna
  3. Anropa ImapClient.ListMessages(MailQuery query) metod och skicka MailQuery med parametrarna för att endast hämta filtrerade meddelanden.

Följande kodsnutt visar hur du ansluter till en IMAP‑brevlåda och hämtar meddelanden som anlände idag och har ordet "newsletter" i ämnet.

Filtrera meddelanden efter specifika kriterier

Kodexemplen ovan filtrerar meddelanden baserat på e‑postens ämne och datum. Vi kan också använda andra egenskaper för att ange andra stödjade villkor. Nedan är några exempel på hur man sätter villkoren med hjälp av MailQuery. Följande kodsnuttar visar hur man filtrerar e‑post på:

  1. Dagens datum.
  2. Ett datumintervall.
  3. Från en specifik avsändare.
  4. Från en specifik domän.
  5. Från en specifik mottagare.

Dagens datum

Följande kodsnutt visar hur du filtrerar e‑post på dagens datum.

Datumintervall

Följande kodsnutt visar hur du filtrerar e‑post efter datumintervall.

Specifik avsändare

Följande kodsnutt visar hur du filtrerar e‑post på en specifik avsändare.

Specifik domän

Följande kodsnutt visar hur du filtrerar e‑post på en specifik domän.

Specifik mottagare

Följande kodsnutt visar hur du filtrerar e‑post på en specifik mottagare.

Avancerad frågebyggnad

Om olika MailQueryBuilder egenskaper sätts i separata satser, då matchas alla villkor. Till exempel, om vi vill hämta meddelanden inom ett datumintervall och från en specifik värd, måste vi skriva tre satser.

Kombinera frågor med AND

Följande kodsnutt visar hur man kombinerar frågor med AND.

Kombinera frågor med OR

MailQueryBuilder tillhandahåller Or() metod som tar två MailQuery instanser som parametrar. Den hämtar meddelanden som matchar något av de två angivna villkoren. Följande kodsnutt visar hur man filtrerar meddelanden som antingen har "test" i ämnet eller "noreply@host.com" som avsändare. Följande kodsnutt visar hur du kombinerar frågor med OR.

Filtrering baserad på InternalDate

Meddelanden kan extraheras från servern baserat på InternalDate, men ibland returnerar servern inte alla meddelanden som syns i inkorgen. Anledningen kan vara serverns tidszon eftersom den kanske inte är UTC för alla servrar såsom Gmail. Aspose skickar kommandon som 008 SEARCH ON 4-May-2014 enligt IMAP‑protokollet men resultatet kan skilja sig åt på grund av serverns tidszonsinställningar. En ny medlem har lagts till i ImapMessageInfo som InternalDate vilket ytterligare hjälper till att filtrera meddelandena. Följande kodsnutt visar användning av InternalDate för att filtrera meddelanden.

Skiftlägeskänslig filtrering

Följande kodsnutt visar hur du använder skiftlägeskänslig e‑postfiltrering.

Ange kodning för Query Builder

API:ets ImapQueryBuilder konstruktor kan användas för att ange kodning för söksträngen. Detta kan också ställas in med hjälp av DefaultEncoding egenskap hos MailQueryBuilder. Följande kodsnutt visar hur du specificerar kodning för query builder.

Anpassade filtreringsalternativ

Filtrera meddelanden med anpassad flagga

Anpassad sökning för filtrering

Till exempel tillåter inte RFC 3501-standarden en meddelandesökning baserad på förekomst av bilagor i meddelanden. Men Gmail erbjuder IMAP‑tillägg som möjliggör en sådan sökning. Nästa kodsnutt visar hur man gör en motsvarande fråga.

ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.CustomSearch("X-GM-RAW \"has:attachment\"");

MailQuery mailQuery = queryBuilder.GetQuery();
ImapMessageInfoCollection messageInfoCollection = imapClient.ListMessages(mailQuery);

Filtrera meddelanden med sidstöd

Den ImapClient ger möjlighet att söka efter meddelanden i brevlådan och lista dem med sidstöd. Följande kodsnutt visar hur man filtrerar meddelanden med sidstöd.