2017-10-12 20 views
3

Gmail API PHPライブラリからすべてのメッセージを取得できません。 listUsersThreadsを使用して、すべてのスレッドを取得して、ユーザーのアカウントで完全または部分的なメールボックスの同期を実行します。最初の完全同期が処理され、必要なメッセージIDが返され、メールメタヘッダー(from、to、date、subject)が格納されます。最後の履歴IDからlistUserHistoryを使用して以降の呼び出しを行うと、最新のメッセージのみを取得するために部分同期を実行できます。私が保存したデータから、会話を表示するために日付順に並べられた2者間の完全なメッセージ会話ログを表示します。メッセージをクリックするとAPIが照会され、メール本文が取得されます。Gmail APIメッセージがありません

問題は、私が保存したメッセージに基づいて、MIMEコンテンツを見ると、自分のデータベースにないメッセージがMIME本体にあることです。また、検索クエリを使用してAPIにクエリを実行しようとしましたが、APIによって返されなかったメッセージがまだありません。

以前の開発者は、メッセージを取得するためにmimecastを使用していましたが、そのデータベースを照会すると、実際には欠落しているメッセージが返されます。

Google Gmail APIは、送信者と受信者の間ですべてのメッセージを私に渡さないのはどうですか? MIMEの本文には、APIを照会する際に利用できないメッセージがはっきりと表示されています。その理由、または見つからないメッセージを見つける方法がわかりません。

ご協力いただければ幸いです。

答えて

1

この問題が他の誰かのために発生した場合は、期限切れの履歴項目と関係があると思います。私は2週間以上にわたって実装を実行した後でしか証明できないので、修正が必要です。

メールボックスの同期を実行することを検討している場合は、特にメッセージが受信トレイやGmail以外のクライアントから送信された場合は、メッセージが消失する可能性があります。履歴アイテムは平均して2週間保存されるので、メールボックスを同期すると、アカウントが有効になってからすべてが同期されますが、期限切れの履歴アイテムは使用できなくなります。

これは、理論的には、部分同期が実行されているときに完全な電子メール会話を行う必要があることを意味します。私のように、Google Cloud Servicesコンソールでプッシュ通知を有効にして、指定されたアカウントで部分同期プロセスを実行するようにシステムに警告する必要がある場合は、必要なすべてのMIMEヘッダーが必要です。

プッシュ通知ではなく、手動または部分的にCRONを使用して部分同期を実行する場合は、すべての履歴項目が引き続き使用可能でアクセス可能な間に間隔を同期するように設定する必要があります。

メッセージIDとのすべての通信のトレースを取得しても、メール本文を取得する有効期限切れのメッセージのルックアップは404ステータスコードで失敗し、いくつかのメッセージの電子メール本文のコンテンツを取得することができます。

したがって、プロセスが電子メールの内容に大きく依存する場合は、部分的な同期中に本文コンテンツをローカルに格納する必要があります。必要なときにはメッセージの内容を参照しますが、与えられたメッセージの本文を取得できなかった場合、私にとって大きな問題は発生しません。

私はこの理論を今から1ヶ月以内に確認できるはずです。私の理論が間違っていると思うなら、私を賢明にしてください。 :)

関連する問題