2017-04-10 23 views
0

メールボックスを見るには以下のコードがあります。見ての通り、lableIdsでは、新しいメッセージだけを聞きたいので、私は1つのラベル、INBOXしか持っていません。しかし、これを実行すると、30秒ごとに異なるmessageidで通知が受信されます。しかし、INBOXには何の変化もなく、新しいアイテムは追加/削除されませんでした。受信ボックスの受信メッセージのみを受信するように時計本体を設定するにはどうすればよいですか?Gmail API:受信トレイのラベルのみ

certificate= new X509Certificate2("file.p12"), "password",  
X509KeyStorageFlags.Exportable); 
credential = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(serviceaccount) 
        { 
         User = username,//username being impersonated 
         Scopes = scopes 
        }.FromCertificate(certificate)); 
var service = new GmailService(new BaseClientService.Initializer() 
    { 
     HttpClientInitializer = credential, 
     ApplicationName = applicationame, 
    }); 


WatchRequest body = new WatchRequest() 
{ 
    TopicName = "projects/projectid/topics/topicname", 
    LabelIds = new[] {"INBOX"} 
} 
string userId = "me"; 
UsersResource.WatchRequest watchRequest = service.Users.Watch(body, userId); 
WatchResponse test = watchRequest.Execute(); 
+0

サービスアカウントを使用しているようです。 Google Identity Platformの公式ドキュメント(https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority)で説明されているようにユーザーを偽装していますか? – Morfinismo

+0

@Morfinismo偽装されているユーザーのIDに渡す場所を強調表示するコードを編集しました。私はサービスアカウントにドメイン全体の権限を与えました。 – jpo

答えて

1

Gmailは、要求されたフィルタデータを明らかに無視します。これはgmail内の既知のバグです。チェックアウトhttps://issuetracker.google.com/issues/37300052は、かなり静かなようですが、進行状況を監視してください。バグレポートを記入することをお勧めします。

私の使用例では、特定のカスタムラベルのメールのみを探しています。そのユーザーの履歴ID(https://developers.google.com/gmail/api/v1/reference/users/history/listを参照)を保存することは可能です。これはエポックであるため、gmail APIをX分ほどごとに呼び出すだけです。これにより、Gmailへの通話回数は減りますが、完璧ではありません。

関連する問題