2017-10-12 5 views
3

Ich habe Probleme beim Abrufen aller Nachrichten über die Gmail-API-PHP-Bibliothek. Ich verwende , um alle Threads abzurufen, die entweder eine vollständige oder teilweise Postfachsynchronisierung für ein Benutzerkonto ausführen. Die anfängliche vollständige Synchronisierung verarbeitet die Nachrichten-IDs, die ich brauche, und gibt sie zurück, die ich dann zum Speichern von Mail-Meta-Kopfzeilen (von, bis, Datum, Betreff) verwendet. Ein nachfolgender Anruf, der listUserHistory von der letzten Verlaufs-ID verwendet, ermöglicht mir eine teilweise Synchronisierung, um nur die letzten Nachrichten abzurufen. Aus den Daten, die ich gespeichert habe, zeige ich dann ein vollständiges Nachrichtenkonversationsprotokoll zwischen zwei Parteien an, sortiert nach Datum, um die Konversation anzuzeigen. Durch Klicken auf die Nachricht wird dann die API abgefragt, um den E-Mail-Text abzurufen, den ich dann anzeigen kann.Gmail API fehlende Nachrichten

Das Problem ist, dass basierend auf den Nachrichten, die ich gespeichert habe, der MIME-Inhalt, gibt es Nachrichten im MIME-Körper, die ich nicht auf meiner Datenbank haben. Ich habe dann auch versucht, die API mithilfe einer Suchabfrage abzufragen, und dennoch fehlen Meldungen, die von der API nicht zurückgegeben werden.

Ein früherer Entwickler verwendet mimecast, um die Nachrichten zu erhalten, und die Abfrage dieser Datenbank gibt tatsächlich die Nachrichten zurück, die ich vermisse.

Wie gibt mir die Google Gmail-API nicht alle Nachrichten zwischen Sender und Empfänger? Der MIME-Körper zeigt deutlich Nachrichten an, die nicht verfügbar sind, wenn die API abgefragt wird, und ich verstehe nicht warum, oder wie man die fehlenden Nachrichten findet.

Jede Hilfe wäre willkommen.

Antwort

1

Also, für den Fall, dass dieses Problem für jemand anderen auftaucht, glaube ich, dass es etwas mit abgelaufenen History-Items zu tun hat. Ich stehe auf dem Prüfstand, da dies erst nach mehr als zwei Wochen meiner Implementierung nachgewiesen werden kann.

Wenn Sie eine Postfachsynchronisierung planen, besteht eine gute Chance, dass Ihnen Nachrichten fehlen, insbesondere wenn diese Nachrichten von einem anderen Client als Inbox oder Gmail gesendet wurden. Verlaufsartikel werden im Durchschnitt zwei Wochen lang aufbewahrt. Wenn Sie also ein Postfach synchronisieren, synchronisieren Sie alles ab dem Zeitpunkt, an dem das Konto aktiviert wurde. Abgelaufene Verlaufselemente sind jedoch nicht verfügbar.

In der Theorie bedeutet dies, dass Sie die vollständige E-Mail-Konversation haben sollten, während eine Teilsynchronisation ausgeführt wird. Sie sollten alle MIME-Header haben, die Sie benötigen, wenn die Kommunikation stattfindet, vorausgesetzt, Sie haben Push-Benachrichtigungen über die Google Cloud Services-Konsole aktiviert, um Ihre Systeme auf die Ausführung eines Teilsynchronisierungsprozesses für ein bestimmtes Konto hinzuweisen.

Wenn Ihre Teilsynchronisierung manuell oder möglicherweise über CRON in einem Intervall statt über Push-Benachrichtigungen ausgeführt wird, müssen Sie sicherstellen, dass das Intervall für die Synchronisierung konfiguriert ist, während alle Verlaufselemente weiterhin verfügbar und verfügbar sind.

Der Nachteil davon ist, dass, selbst wenn Sie eine Spur der gesamten Kommunikation mit ihren Nachrichten-IDs haben, eine Suche nach einer abgelaufenen Nachricht zum Abrufen der E-Mail-Nachricht mit einem 404-Statuscode fehlschlagen, und Sie werden nicht In der Lage, E-Mail-Body-Inhalte für einige Nachrichten abzurufen.

Wenn also Ihre Prozesse stark von dem Inhalt der E-Mail abhängen, sollten Sie Body-Inhalt auch während einer Teilsynchronisation lokal speichern. Ich brauche wirklich nur die MIME-Header, obwohl ich den Inhalt der Nachricht nach Bedarf suche wird für mich keine größeren Probleme verursachen, wenn ich den Text einer bestimmten Nachricht nicht abrufen konnte.

Ich sollte in der Lage sein, diese Theorie innerhalb eines Monats zu bestätigen, also wenn Sie denken, dass meine Theorie falsch ist, zögern Sie nicht, mich klüger zu machen. :)