Wie kann ich eine bestimmte E-Mail abrufen, die auf einem bestimmten Text in der Nachricht basiert? Zum Beispiel, wie die Google Mail-Suche funktioniert. Wenn Sie nach einem bestimmten Text suchen, der sich in der E-Mail befindet, ruft Google Mail die Nachricht ab, die mit dem Text verknüpft ist. Vorzugsweise ohne Schleifen.Wie wird nach einer bestimmten E-Mail-Nachricht im IMAP-Postfach gesucht?
5
A
Antwort
4
Sie suchen nach der SearchMailBox
Methode. Hier ein einfaches Beispiel, in dem Sie davon ausgehen, dass der IMAP-Client (in diesem Fall die IMAPClient
-Variable vom Typ TIdIMAP4
) bereits mit dem Google Mail-Server verbunden ist. Für diejenigen, die danach suchen, schauen Sie zum Beispiel unter this post
und setzen Sie diesen Code innerhalb der try..finally
Block in der Nähe von IMAPClient.Connect
und IMAPClient.Disconnect
.
var
// in this example is not shown how to connect to Gmail IMAP server but
// it's expected that the IMAPClient object is already connected there
IMAPClient: TIdIMAP4;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
MsgObject: TIdMessage;
SearchInfo: array of TIdIMAP4SearchRec;
begin
// if the mailbox selection succeed, then...
if IMAPClient.SelectMailBox('INBOX') then
begin
// set length of the search criteria to 1
SetLength(SearchInfo, 1);
// the SearchKey set to skBody means to search only in message body texts
// for more options and explanation, see comments at the TIdIMAP4SearchKey
// enumeration in the IdIMAP4.pas unit
SearchInfo[0].SearchKey := skBody;
// term you want to search
SearchInfo[0].Text := 'Search term';
// if the search in the selected mailbox succeed, then...
if IMAPClient.SearchMailBox(SearchInfo) then
begin
// iterate the search results
for I := 0 to High(IMAPClient.MailBox.SearchResult) do
begin
// make an instance of the message object
MsgObject := TIdMessage.Create(nil);
try
// try to retrieve currently iterated message from search results
// and if this succeed you can work with the MsgObject
if IMAPClient.Retrieve(IMAPClient.MailBox.SearchResult[I],
MsgObject) then
begin
// here you have retrieved message in the MsgObject variable, so
// let's do what what you need with the >> MsgObject <<
end;
finally
MsgObject.Free;
end;
end;
end;
end;
end;
Hier ist die schnelle Implementierung der IMAP-Suche nach UTF-8-Zeichensatz. Es nutzt zwischengeschaltetes Klasse aufgrund geschützt ParseSearchResult
Methode:
type
TBasicSearchKey = (bskBcc, bskBody, bskCc, bskFrom, bskHeader, bskKeyword,
bskSubject, bskText, bskTo);
const
IMAPSearchKeys: array [TBasicSearchKey] of string = ('BCC', 'BODY', 'CC',
'FROM', 'HEADER', 'KEYWORD', 'SUBJECT', 'TEXT', 'TO');
type
TIdIMAP4 = class(IdIMAP4.TIdIMAP4)
public
function SearchMailBoxUTF8(const ASearchText: string;
ASearchKey: TBasicSearchKey): Boolean;
end;
implementation
{ TIdIMAP4 }
function TIdIMAP4.SearchMailBoxUTF8(const ASearchText: string;
ASearchKey: TBasicSearchKey): Boolean;
var
SearchText: RawByteString;
begin
Result := False;
CheckConnectionState(csSelected);
SearchText := UTF8Encode(ASearchText);
SendCmd(Format('SEARCH CHARSET UTF-8 %s {%d}', [IMAPSearchKeys[ASearchKey],
Length(SearchText)]), ['SEARCH']);
if LastCmdResult.Code = IMAP_CONT then
IOHandler.WriteLn(SearchText, TEncoding.UTF8);
if GetInternalResponse(LastCmdCounter, ['SEARCH'], False) = IMAP_OK then
begin
ParseSearchResult(FMailBox, LastCmdResult.Text);
Result := True;
end;
end;
Und die Nutzung:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
MsgObject: TIdMessage;
begin
if IMAPClient.SelectMailBox('INBOX') and
IMAPClient.SearchMailBoxUTF8('Search term', bskText) then
begin
for I := 0 to High(IMAPClient.MailBox.SearchResult) do
begin
MsgObject := TIdMessage.Create(nil);
try
if IMAPClient.Retrieve(IMAPClient.MailBox.SearchResult[I],
MsgObject) then
begin
// here you have retrieved message in the MsgObject variable, so
// let's do what what you need with the >> MsgObject <<
end;
finally
MsgObject.Free;
end;
end;
end;
end;
Verwandte Themen
- 1. Wie wird die ganze Zeichenfolge nach einem bestimmten Wort gesucht?
- 2. Wie wird in der Tabelle nach bestimmten Spaltenwerten gesucht?
- 3. Wie wird im iPhone SDK nach einem Namen gesucht?
- 4. Wie wird nach dem nächsten Wert in einer Nachschlagetabelle gesucht?
- 5. Wie wird nach ungültigen RLM-Ergebnissen gesucht?
- 6. Wie wird nach Eclipse P2-Repositories gesucht?
- 7. Wie wird nach einem festen Dokument gesucht?
- 8. Wie wird nach dem gleichen Element in einer ArrayList gesucht?
- 9. Wie wird nach einer bestimmten Datei in der Quellcodeverwaltung von TFS in einem bestimmten ausgewählten Projekt gesucht?
- 10. Was bedeutet, wenn (fstreamTest) überprüfen? Wird nach einer bestimmten Flagge gesucht?
- 11. Applet-Jar wird nicht nach Dateien gesucht
- 12. Kopfzeile ignorieren, wenn nach Duplikaten gesucht wird
- 13. Wie wird nach vorhandenen Objekten in NSSet oder NSCountedSet gesucht?
- 14. Wie wird nach allen Großbuchstaben in vim gesucht?
- 15. Doktrin 2: Wie wird nach einer Entität nach dem Wert ihrer Assoziation gesucht?
- 16. Wie wird nach Ähnlichkeit in MySQL gesucht und sortiert?
- 17. Wie wird nach mehreren Feldern (SQL, PHP) gesucht?
- 18. Wie wird nach einem Zeichenfolgenliteral gesucht, das Escapezeichen erlaubt?
- 19. Wie wird nach allen Vorkommen eines Schlüssels in einer tief verschachtelten JSON-Datei gesucht?
- 20. Wie wird ein RSpec-Test nach einer bestimmten Zeitspanne ausgeführt?
- 21. Wie kann ich mehrere verschiedene Formularfelder validieren, ich habe gesucht und nach einer Woche gesucht
- 22. Wie wird ein UrlFetchApp.fetch nach einer bestimmten Zeit abgebrochen?
- 23. Wie wird nach einer bestimmten Prüfung in den Vorlagen angezeigt?
- 24. Wie wird über alle Felder gesucht?
- 25. Wie wird nach einer Zeichenfolge mit Leerzeichen in Objective C gesucht?
- 26. Wird nach einem ungültigen Textfeld gesucht, das die Leistung beeinträchtigt?
- 27. BeautifulSoup gibt leere Liste zurück, wenn nach Klassenklassennamen gesucht wird
- 28. Telling ld wo über eine Umgebungsvariable nach Verzeichnissen gesucht wird
- 29. Kann in einer Suchleiste nach einem DC.js-Diagramm gesucht werden?
- 30. So suchen Sie nach einer bestimmten Zeichenfolge im Zellenfeld
Ist diese Rückkehr HTML oder reinen Text? Denn wenn Sie in E-Mails, die reiner Text sind, nach etwas suchen, funktioniert das OK. Wenn sie HTML sind, wird die Suche nicht funktionieren. –
Es hängt von der IMAP-Zielimplementierung des Befehls ['SEARCH'] (http://tools.ietf.org/html/rfc1730#section-6.4.4) ab, aber in diesem Fall wird nicht in einer Textnachricht gesucht Teile leider. Guter Punkt zu erwähnen. – TLama
Ich denke, es könnte eine Möglichkeit geben, um reinen HTML oder Text in Google Mail-Einstellungen zurückgeben. –